我的代码是:

class cMySingleton{
private:
    static bool bInstantiated;
    int mInt;
    cMySingleton(){
        mInt=0;
    }
public:
    cMySingleton(int c){
        if (bInstantiated){
            cout << "you can only instantiated once";
        }
        else {
            cMySingleton();
            mInt=c;
        }
    }
};

int main () {

    cMySingleton s(5);
    cMySingleton t(6);
}

链接器不断抱怨:
Undefined symbols for architecture x86_64:
  "cMySingleton::bInstantiated", referenced from:
      cMySingleton::cMySingleton(int) in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

到底是怎么回事? C++新手在这里~~

最佳答案

您应该初始化静态字段。

http://ideone.com/Y1huV

#include <iostream>
class cMySingleton{
private:
    static bool bInstantiated;
    int mInt;
    cMySingleton(){
        mInt=0;
    }
public:
    cMySingleton(int c){
        if (bInstantiated){
            std::cout << "you can only instantiated once";
        }
        else {
            cMySingleton();
            mInt=c;
        }
    }
};
bool cMySingleton::bInstantiated = true;
int main () {

    cMySingleton s(5);
    cMySingleton t(6);
}

您可以在这里找到更多信息:

Static Data Member Initialization

在cout周围也缺少include和std::。

10-01 17:57