如何引用类的静态私有对象?

Leo*_*ele 0 c++ static refer

这是上下文:

我有一个应该说'嗨'的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声明之前发布.

Dav*_*rtz 7

您需要在代码中的某处实际创建静态对象.你所做的就是说班上有一个.将其添加到.cpp文件中:

B A::b;
Run Code Online (Sandbox Code Playgroud)

这假设对象应该是默认构造的.