0

这是上下文:

我有一个应该说“嗨”的 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 的声明之前。

4

1 回答 1

7

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

B A::b;

这假定对象应该是默认构造的。

于 2012-08-22T02:11:52.910 回答