1

私のコードは次のとおりです。

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++初心者はこちら~~

4

3 に答える 3

3

static フィールドを初期化する必要があります。

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);
}

ここで見つけることができる詳細情報:

静的データ メンバーの初期化

また、cout の周りに include と std:: がありませんでした。

于 2012-09-11T06:39:20.563 に答える
2

初期化する

static bool bInstantiated;

の外cMySingleton

bool CMySingleton::bInstantiated;
于 2012-09-11T06:37:02.693 に答える
2

.cpp ファイルのクラス宣言の外側で静的メンバーを初期化することを忘れないでください。

bool cMySingleton::bInstantiated = false;
于 2012-09-11T06:40:33.253 に答える