0

インターフェース:

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"、参照元: control::rmKeyControl::addKeyAction(char, std::__1::function) in rm_KeyControl.old: symbol(s) not found forアーキテクチャ x86_64 clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを表示するには -v を使用します)

これは、Xcode 4 の標準的なリンカ エラーのようですが、あらゆる種類の理由で発生するようであり、詳しく説明することはありません。このエラーは、x86_64 アーキテクチャでは機能しないバイナリ命令が存在することを示しているようですが、このコンテキストでは意味がありません。このエラーが発生するのはなぜですか?

編集:rmKeyControlそれが namespaceにあることを忘れていましたcontrolusing namespace control;あなたはそれを見ることができませんが、私は実装しています。

4

1 に答える 1

4

静的メンバーは単なる宣言です。次のように実装/ソースファイルで定義します-

// include interface header and then do -
map<char, function<char(char)>> rmKeyControl::sm_function_list;
于 2012-07-20T20:16:07.187 に答える