架构x86_64的未定义符号:

时间:2012-07-20 20:12:43

标签: c++ xcode4 linker-errors

接口:

class rmKeyControl {
    static map<char, function<char(char)>> sm_function_list;
public:
    static bool addKeyAction(char, function<char(char)>);
};

实现:

bool rmKeyControl::addKeyAction(char key, function<char(char)> func) {
    if (!sm_function_list.count(key)) {
        sm_function_list.insert(pair<char, function<char(char)>>(key, func));
        return true;
    } return false;
}

完整的错误消息是:

  
    
      

架构x86_64的未定义符号:       “control :: rmKeyControl :: sm_function_list”,引自:       rm_KeyControl.o中的control :: rmKeyControl :: addKeyAction(char,std :: __ 1 :: function)       ld:找不到架构x86_64的符号       clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

    
  

这似乎是Xcode 4的标准链接器错误,但它似乎出于各种各样的原因,并且它从未详细说明。此错误似乎表明存在无法在x86_64体系结构上运行的二进制指令,但在此上下文中没有意义。为什么我会收到此错误?

修改:我忘了提及rmKeyControl位于名称空间control中。我在实施中using namespace control;,虽然你看不到它。

1 个答案:

答案 0 :(得分:4)

静态成员只是声明。在实现/源文件中定义它,如 -

// include interface header and then do -
map<char, function<char(char)>> rmKeyControl::sm_function_list;