这是上下文:
我有一个应该说'嗨'的A级,但由于A不知道演讲,它使用B级的对象为他演讲.因为A持有B的唯一目的是B演讲它,有不需要每个A拥有它自己的B对象;因此我选择使用唯一的静态私有B.
像这样:
class A {
static B b;
public:
void sayHi();
};
void A::sayHi()
{
b.sayHi();
}
Run Code Online (Sandbox Code Playgroud)
B就像这样:
class B {
public:
void sayHi();
};
void B::sayHi()
{
std::cout << "Hi!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试使用g ++编译器编译此代码时...
int main() {
A a;
a.sayHi();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到"未定义的引用"错误.我不知道为什么这不起作用,我想知道编译器认为我指的是A中的非静态B,但我不知道它应该如何.
PS:在我的代码中,B的声明在A声明之前发布.
您需要在代码中的某处实际创建静态对象.你所做的就是说班上有一个.将其添加到.cpp文件中:
B A::b;
Run Code Online (Sandbox Code Playgroud)
这假设对象应该是默认构造的.