【问题标题】:Undefined symbols for architecture x86_64:架构 x86_64 的未定义符号:
【发布时间】:2012-07-20 03:26:48
【问题描述】:

界面:

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;在实现中,虽然你看不到。

【问题讨论】:

    标签: c++ xcode4 linker-errors


    【解决方案1】:

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

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

    【讨论】:

    • 真的吗?这是一件大事。我不知道为什么我以前从来不知道。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2015-08-23
    • 2014-05-27
    • 2017-07-06
    • 2016-06-20
    • 2016-06-14
    • 2017-08-25
    相关资源
    最近更新 更多