![]() |
1
484
类声明应该在头文件中(如果不共享,则在源文件中)。
但是初始化应该在源文件中。
如果初始化在头文件中,则包含头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,您将得到链接器错误,因为初始化变量的代码将在多个源文件中定义。
注:
Matt Curtis:指出,如果静态成员变量是const int类型,那么C++就可以简化上面的(例如)。
|
![]() |
2
81
对于一个 变量 : 福:
英尺:CPP:
这是因为只有一个
对于一个 常数 您可以在类声明中直接输入值:
|
![]() |
3
25
对于这个问题的未来观众,我想指出的是,你应该避免 monkey0506 is suggesting . 头文件用于声明。
头文件每编译一次
通过:
如果我们
永远不要将执行的代码放入头中,原因与
包括防护装置(我同意你应该经常使用)保护你不受其他东西的伤害:同一个头部是间接的
|
![]() |
4
19
使用Microsoft编译器[1]时,静态变量不是
注意,我不是说这是好的,我只是说这是可以做到的。
[1]现在,编译器比MSC支持的多
|
![]() |
5
16
是初始化变量的正确语法,但它必须进入源文件(.cpp)而不是头文件。 因为它是一个静态变量,所以编译器只需要创建它的一个副本。你必须有一行“int foo:i”来告诉编译器把它放在哪里,否则你会得到一个链接错误。如果它在一个头文件中,那么您将在包含该头文件的每个文件中获得一个副本,因此从链接器中获取多个定义的符号错误。 |
![]() |
6
16
由于C++ 17,静态成员可以在头文件中定义 内联的 关键字。 http://en.cppreference.com/w/cpp/language/static “静态数据成员可以内联声明。可以在类定义中定义内联静态数据成员,并且可以指定默认成员初始值设定项。它不需要类外定义:“
|
![]() |
7
11
我这里没有足够的代表来添加这个评论,但是我觉得用它来写你的标题是一种很好的风格。 #include guards 无论如何,正如几个小时前paraix指出的那样,这将防止多定义错误。除非您已经在使用一个单独的cpp文件,否则不必只使用一个文件来初始化静态非整型成员。
我认为没有必要为此使用单独的cpp文件。当然,你可以,但是没有技术上的原因让你不得不这么做。 |
![]() |
8
10
如果要初始化某个复合类型(F.E.字符串),可以这样做:
作为
当然你得去
|
|
9
5
如果使用头保护,也可以在头文件中包含分配。我已经用这个技术创建了一个C++库。实现相同结果的另一种方法是使用静态方法。例如。。。
上述代码的“好处”是不需要cpp/源文件。再次,我使用的方法用于我的C++库。 |
![]() |
10
4
我听从卡尔的意见。我喜欢它,现在我也用它。 我改变了一点符号,增加了一些功能。
这个输出
|
![]() |
11
4
适用于多个对象的静态构造函数模式 一个成语是在: https://stackoverflow.com/a/27088552/895245 但这里有一个更清晰的版本,它不需要为每个成员创建一个新的方法,以及一个可运行的示例:
参见: static constructors in C++? I need to initialize private static objects
用试验
|
![]() |
12
3
同时在privatestatic.cpp文件中工作:
|
![]() |
13
3
A怎么样
我们只需要使用
这与注释的其他部分没有什么不同,实际上它遵循了在全局范围内初始化变量的相同原则,但是通过使用此方法,我们使变量显式(并且易于理解)而不是将变量的定义挂在那里。 |
![]() |
14
2
您遇到的链接器问题可能是由以下原因引起的:
对于那些从C++开始的人来说,这是一个常见的问题。静态类成员必须在单个翻译单元中初始化,即在单个源文件中初始化。 不幸的是,静态类成员必须在类体外部初始化。这使得只写头代码变得复杂,因此,我使用了完全不同的方法。可以通过静态或非静态类函数提供静态对象,例如:
|
![]() |
15
1
当我第一次遇到这个的时候,我只想提一件有点奇怪的事情。 我需要初始化模板类中的私有静态数据成员。 在.h或.hpp中,初始化模板类的静态数据成员如下所示:
|
![]() |
16
1
|
![]() |
17
0
这符合你的目的吗?
|
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |