这是上下文:
我有一个应该说“嗨”的 A 类,但由于 A 不知道说话,它使用 B 类的对象为他说话。由于 A 持有 B 的唯一目的是为 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 的声明之前。