【发布时间】:2011-11-04 07:11:44
【问题描述】:
我是 Objective-C 的新手,对使用 C++ 和模板有点生疏,我不确定为什么会出现此链接错误。
我有一个包含类似于以下定义的头文件:
struct Info {
std::string name;
};
typedef std::map<std::string, Info> InfoMap;
void Validate(InfoMap* infoMap);
@interface InfoValidator : NSObject
{
}
+(InfoValidator*) getInstance;
-(void) validate:(InfoMap*)infoMap;
@end
我还有一个 .mm 文件,其中包含(全局)Validate() 方法的以下定义:
void Validate(InfoMap* infoMap)
{
[[InfoValidator getInstance] validate:infoMap];
}
当我从 C++ 类(在 .mm 文件中定义)调用 Validate() 时,我收到以下错误:
Undefined symbols for architecture armv7:
Validate(std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Info, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, > std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, ?> std::allocator<char> > const, Info> > >*)",
referenced from:
ItemInterface::ValidateItems(int, char const**)in iteminterface.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
该文件已添加到项目中,这是我得到的唯一链接错误。感谢您的帮助。
【问题讨论】:
-
是的,它找不到您的代码中没有的符号
Market_Validate。 -
那是名称剥离过程中的一个错误。我现在已经编辑它是正确的。
标签: ios xcode4 linker objective-c++