【发布时间】:2012-08-22 02:09:08
【问题描述】:
这是上下文:
我有一个 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,但我不知道它应该如何。
P.S.:在我的代码中,B 的声明在 A 的声明之前。
【问题讨论】:
-
骗子不少。您需要定义成员。