2013-12-15 35 views
0

我在庫中添加了一個新函數,並且在編譯Gcc時拒絕識別它。 每個功能都可以毫無問題地工作,這是唯一可以解決問題的功能。對「Str :: ToInt(unsigned char *)」的未定義引用

String.hpp

#ifndef __String_Included__ 
#define __String_Included__ 

namespace Str 
{ 
    //Other prototype 
    int ToInt(unsigned char*); 
}; 
#endif 

String.cpp

int ToInt(unsigned char* Source) 
{ 
    //Codecodecodecodecodecodecode 
} 

當我打電話海峽:: ToInt主我得到這個錯誤。 我工作的代碼塊12.11和Windows 8

+0

你沒有發佈完整的代碼(至少一個'#endif'缺失)。假設這是完整的,那麼你的CPP文件缺少名稱空間。 –

+2

您還沒有定義'Str :: toInt',您已經定義了'toInt' ... –

+1

請注意,包含任何地方的雙下劃線的名稱都是爲實現(C++編譯器及其標準庫)保留的。您只有在獲得明確許可的情況下才允許發言(例如,明確允許使用'__FILE__'和'__LINE__')。 –

回答

2

你宣佈Str::ToInt()作爲命名空間Str的成員,但你具有相同名稱ToInt()任何命名空間之外定義的函數。你需要,至少,在Str::前面定義的:

int Str::ToInt(unsigned char* Source) { ... } 
+0

您也可以將函數定義包裝在'namespace Str {...}'中。編譯器將「合併」兩個或更多'名稱空間Str {...}塊。如果在命名空間中有許多功能,則少打字。 –