これはコンテキストです:
私は「こんにちは」と言うべきクラス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の宣言の前にあります。