ios - XCode 4.2 Lion(iOS 产品)中与 Objective-C++/C++ 的链接错误

标签 ios xcode4 linker objective-c++

我是 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 重命名为 Validate?链接错误指的是前者,给出的代码中不存在。

如果是这样,该代码单独看起来是正确的,我怀疑您所显示的代码之外有某些地方出错了。确保两个 .mm 文件实际上都在编译和链接。检查两者是否包含与您的 Validate() 函数声明相同的头文件。由于您在将函数发布到此处之前已重命名该函数,因此请确保您在整个代码中使用相同的名称(具体而言,声明和定义必须完全匹配)。

您是否在任何地方使用 namespace ?如果声明不是,请确保您没有不小心将函数定义放在命名空间中 - 它们将引用不同的函数。

请注意,您发布的代码无法编译,因为您的 struct Info 定义后缺少一个分号。一旦针对问题更改了代码,而没有测试该代码是否仍然存在问题,通常无法提供帮助。如果您仍然卡住,我建议您尝试修改此问题中的代码,以便编译并显示相同的链接错误。如果您无法重现它,请仔细查看您的“真实”代码和问题代码之间的差异。

关于ios - XCode 4.2 Lion(iOS 产品)中与 Objective-C++/C++ 的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005924/

相关文章:

ios - Swift 3 - 如何将 UISwitch 的当前值存储在 UITableViewCell 中,实际 ViewController 的变量中?

ios - 我想在iPad上的手机缺口应用程序中自动加载本地视频和音频

iphone - SBTableAlert 不起作用

c++ - 简单地包含 SDL header 会导致链接器错误

c++ - 如何禁用 TBB 的自动链接

android - 使用 Gradle 和 CMake 将静态 ".a"库链接到 Android Studio 项目

ios - NSNumberFormatter 的准确性问题

ios - 试图理解#selector 及其方法所发生的事情需要参数 Swift 3

xcode - 如何使 Xcode IDE 尊重 CONFIGURATION_BUILD_DIR?

linux - 如何在 Linux ELF 中将 .text 部分分离为 4K 对齐地址