这是上下文:
我有一个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,但我不知道应该怎么做。
附注:在我的代码中,B的声明先于A的声明。
最佳答案
您实际上需要在代码中的某处创建静态对象。您所要做的就是说全班有一个。将此添加到.cpp
文件:
B A::b;
假设该对象应为默认构造。