这是上下文:

我有一个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;


假设该对象应为默认构造。

10-07 20:13