C++:要包含在多个 cpp 文件中的类中的静态变量
C++: static variables in the class to be included in multiple cpp files
// A.h
class A {
public:
static int a;
};
int A::a = 0;
如果我尝试在多个.cpp文件中包含A.h
,链接将失败并显示multiple definition of A::a
.我认为这是有道理的,因为每个.obj文件都包含A::a
但是,我可以使用模板,
// A.h
template<class T>
class A {
public:
static T a;
};
template<class T>
T A<T>::a = 0;
我现在可以在多个.cpp文件中包含A.h
,还可以在一个.cpp文件中分配A<int>::a = 100;
的值,并在另一个文件中获得相同的值 A<int>::a
.
- 模板什么时候有这么大的不同?
- 这个静态变量只有 1 个副本吗?哪个 .obj 将保留此变量?
- 构造函数是否只调用一次?如果初始值不同,哪一个赢?
模板什么时候有这么大的不同?
总是。我想我不明白这个问题。
这个静态变量只有 1 个副本吗?
对于实例化模板T
每种不同类型的最终程序中只有一个副本。
哪个 .obj 将保留此变量?
所有这些都是从实例化模板的翻译单元生成的。然后,链接器选择一个链接并丢弃所有其他链接器。
构造函数是否只调用一次?
每个专业一次。
如果初始值不同,哪一个赢?
这将违反"一个定义规则"。这样的程序格式不正确,不需要诊断。
为什么不在实现class A
的 souce 文件中定义静态成员?然后,您应该能够在没有问题的多个源文件中包含A.h
。
// A.h
class A {
public:
static int a;
};
// A.cpp
int A::a = 0;
相关文章:
- 通过多个头文件使用常量变量
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 无法通过头文件保存变量的值
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在 C++ 中将双精度变量写入二进制文件
- 如何使用文件中的文本,例如变量
- 定义C++新的环境变量并在 bat 文件中使用它
- 在头文件中定义变量不会出错
- 复制文件流C++静态变量
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- C++将文本从.txt文件解析为变量
- 从 C 中的变量获取文件的路径,C++
- 使用boost ::日志配置文件变量
- C++:帮助存储和显示输入文件变量
- 文件变量的问题
- 如何在先决条件列表中展开生成文件变量
- QT多个文件c++变量