0

これはコンテキストです:

私は「こんにちは」と言うべきクラスAを持っていますが、Aはスピーチを知らないので、クラスBのオブジェクトを使用して彼のためにスピーチします。各Aがそれ自身のBオブジェクトを保持する必要はありません。このため、これには一意の静的プライベートBを使用することにします。

このような:

class A {
    static B b;
public:
    void sayHi();
};

void A::sayHi()
{
    b.sayHi();
}

そしてBはこのようになります:

class B {
public:
    void sayHi();
};

void B::sayHi() 
{
    std::cout << "Hi!" << std::endl;
}

問題は、このコードをg++コンパイラでコンパイルしようとしたときです...

int main() {
    A a;
    a.sayHi();
    return 0;
}

「未定義の参照」エラーが発生します。なぜこれが機能しないのかわかりません。コンパイラは、Aで非静的Bを参照していると考えているのではないかと思っていましたが、どうあるべきかわかりません。

PS:私のコードでは、Bの宣言はAの宣言の前にあります。

4

1 に答える 1

7

コードのどこかに静的オブジェクトを実際に作成する必要があります。あなたがしたことは、クラスに1つあると言うことだけです。.cppこれをファイルに追加します。

B A::b;

これは、オブジェクトがデフォルトで構築されていることを前提としています。

于 2012-08-22T02:11:52.910 に答える