2013-02-11 28 views
0

我的问题如下:为什么易失静态成员初始化生成重定义编译错误?

我有一个类与静态计数器。 我把这个计数器设置为volatile,因为我在多线程环境中使用了这个变量。

class.h

class myClass 
{ 
public: 
volatile static int mCounter; 
(...) 
}; 

class.cpp

int myclass::mCounter = 0; 

在CPP文件,我初始化它,我获得以下编译错误:

'mCounter' : redefinition; different type modifiers 

为什么?

在此先感谢。

+3

'volatile'在并发性方面没有任何**。你的程序很可能是错误的。 – 2013-02-11 11:56:59

+0

我对每个处理器都有专用的缓存,挥发性单词不能确保从内存中读取值而不是这些缓存中的一个? – 2013-02-11 12:05:16

+0

你试图解决什么是你的真正问题?是不止一个线程更新'mCounter'?如果是这样,你需要的不仅仅是“volatile”。 – 2013-02-11 12:08:12

回答

4

您需要重复该行上的“volatile”。

+4

以及'int' ...? – 2013-02-11 11:56:35

+0

是的,以及整数。 – 2013-02-11 12:01:31

+0

谢谢Mats,它的工作原理。 – 2013-02-11 12:12:03