2013-12-15 36 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 {...}块。如果在命名空间中有许多功能,则少打字。 –