2012-05-11 47 views
0

我已經爲主要功能和菜單功能實現了Customer,DVD,Receipt,classes和2個文件,我包含了所有.h文件,但是當我從菜單功能中使用函數時,它不工作,並說功能沒有定義。我想寫一個獨立的.cpp文件,它被稱爲main,它是我的應用程序的驅動程序。來自其他C++文件的訪問方法

這是我的代碼:

#ifndef CUSTOMER_H 
#include "Customer.h" 
#endif 

#ifndef DVD_H 
#include "DVD.h" 
#endif 

#ifndef MAIN_FUNC_H 
#include "MainFunctions.h" 
#endif 

#ifndef MENU_FUNC_H 
#include "MenuFunctions.h" 
#endif 

#ifndef RECEIPT_H 
#include "Receipt.h" 
#endif 

using namespace std; 

int main() { 
    intro(); 

    return 0; 
} 

和錯誤是:

錯誤1錯誤C2129:靜態函數 'void介紹(無效)' 聲明但 沒有定義C:\程序文件(86)\微軟的Visual Studio 10.0 \ VC \包括\ xmemory 186 1 DVD_App

即使函數intro()MenuFunctions.h文件中定義,並實施了MenuFunctions.cpp

注:2檔,MenuFunctions和MainFunctions不要在他們班,只是靜態函數 我也試了一下,而不包括警衛,再沒有工作

+2

移除介紹()聲明 – nothrow

+0

它的工作O_O 了'static'爲什麼它工作,如果我去除靜電? –

+0

aizen92,看到我的回答 – nothrow

回答

2

如果您使用static(注意 - 函數而不是方法)標記函數,則表示編譯單元(.cpp文件)爲「本地」。所以它需要在那裏聲明和定義,並且從其他cpp文件不可見。因此,除去靜態手段,即可以在編譯單元中訪問該函數。

+0

AHHA,奧凱 感謝尤索林 –

0

您不編譯MenuFunctions.cpp,爲了讓編譯器知道intro()的定義,它需要實現代碼。檢查你的makefile是否有,如果沒有,在main()之前包含MenuFunctions.cpp,或者給編譯器指定MenuFunctions.cpp。

0

確保MenuFunctions.cpp文件有

#include "MenuFunctions.h" 

在它的開始。錯誤表示已聲明,但未定義。保護#include "MenuFunctions.h"以防止雙重包含。

+0

它包括在內,它在.cpp文件 –

+0

對不起守衛太多,但沒想到你居然宣稱的功能'static',如尤索林(投他的答案了)指出。只是以爲你定義的函數,你把它們稱作靜態... – George