为啥我的类中不能有静态对象? [复制]
Posted
技术标签:
【中文标题】为啥我的类中不能有静态对象? [复制]【英文标题】:Why can I not have a static object in a class? [duplicate]为什么我的类中不能有静态对象? [复制] 【发布时间】:2014-01-13 05:47:44 【问题描述】:参考以下:
class A ... ;
class B
static A a; // this fails
...
static A& getA() static A a; return a; // this works
...
;
...
B b;
b.a <-- gives error: undefined reference to B::a
为什么我不能在class B
中有一个static A
,但从方法中返回它就可以了?
[编辑] 有点奇怪:
struct C
static const int x = 5;
;
int main()
int k = +C::x;
std::cout << "k = " << k << "\n";
return 0;
output: k = 5
C::x
没有在实现范围内定义,也没有C
的实例,但是,unary +
C::x
是可访问的...!?
【问题讨论】:
你得到的错误是什么?你能更具体一点吗?在 C++ 中,您可以将静态对象作为类的一部分。 @legends2k:抱歉,已修复。 【参考方案1】:你肯定可以完全做到这一点。
你可能忘记做的是定义类外的对象(恰好一次):
class B
// ...
;
A B::a;
编辑:基于对问题的编辑,现在这基本上是确定性,而不仅仅是概率。
【讨论】:
即使是 B 类的static int n
,我也得到了同样的结果; static
是什么要求它必须在类之外定义?
@slashmais:这正是 C++ 要求你做事的方式。这是有道理的(即使没有创建类的实例,也需要定义数据项),但对于大多数实际目的,这只是你必须做的事情,这就是生活(或者这就是 C++,无论如何)。
@Jerry Coffin,如果我在 c++(非多线程 Linux 程序环境)中有这么多公共静态类成员变量,有什么问题吗?我已将一些全局变量作为公共静态变量移到一个类中。
@sree:也许将它们放入命名空间更有意义?以上是关于为啥我的类中不能有静态对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们不能在 TypeScript 类中定义一个 const 字段,为啥静态只读不起作用?