如何跨文件使用类静态变量
how to use class static variable across files
如果我有一个类似的类:
//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();
};
and in ball.cpp:
int Ball::f()
{
return 1;
}
这导致了i
的多重定义。
我试着把extern
在line1,line2和定义它在第3行,仍然有同样的错误,我也搜索了网络,大多数结果我发现谈论一个变量单独声明(不是在一个类),而我有一个静态类变量。
我知道extern与静态相反,但在line1中制作i
extern并没有帮助,我也在SO中看到了许多问题,这是关于我不想要的名称空间的讨论,这并不能解决我的问题。
需要注意的是,没有body.cpp,除了Ball之外还有继承body的类,并且main.cpp将访问所有子类。
如何在Body .h之外使用Body::i呢?
p
创建另一个翻译单元Body.cpp
并将定义移动到那里
int Body::i=2;
即使使用标题保护符(正如您提到的),定义也会出现在多个翻译单元中,因此会出现多重定义错误。
在您的特殊情况下,static
类成员是一个原语,可以在声明点初始化:
class Body {
static int i = 2;
};
你不应该在header中定义静态成员。您需要为它创建一个源 (.cpp
)文件:
body.h(声明静态数据但不定义)
class Body
{
static int i; // only declare
};
// int Body::i=2; // do not define it here
body.cpp (这里定义静力学)
#include "body.h"
int Body::i = 2; // now we define it
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量