【发布时间】:2015-05-30 11:42:09
【问题描述】:
如果我有类似的课程:
//body.h
class Body
{
static int i;//line 1
};
int Body::i=2;/line 2
还有一个像这样的类:
//ball.h
#include <body.h>
//line 3
class Ball:public Body
{
int f();
};
在 ball.cpp 中:
int Ball::f()
{
return 1;
}
这会导致i 的多重定义。
我尝试将extern 放在第 1 行、第 2 行中并在第 3 行中定义它,但仍然有同样的错误,我还搜索了网络,我发现大多数结果都是关于单独声明的变量(不在类中)而我有一个静态类变量。
我知道 extern 与 static 相反,但在 line1 中制作 i extern 并没有帮助,而且我在 SO 中看到了很多问题,this 谈到了我不想要的命名空间,this 没有t 解决我的问题。
请注意,没有 body.cpp,除了 Ball 之外还有其他类继承了 body,还有 main.cpp 可以访问所有子类。
那么如何才能在 body.h 之外使用 Body::i 呢?
PS
所有类都被标题保护包围。
【问题讨论】:
-
包含守卫和重新定义错误的混淆必须是最不可能根除的误解之一。谢谢,奥巴马。
标签: c++