2009-12-05 35 views
2

我试图创建C++中的静态结构:静态结构连接错误

 
static struct Brushes 
{ 
    static HBRUSH white ; 
    static HBRUSH yellow ; 
} ; 

但其没有工作,我越来越:

 
Error 4 error LNK2001: unresolved external symbol "public: static struct HBRUSH__ * Brushes::white" 

为什么?

这个想法是能够在整个程序中使用Brushes::white,Brushes::yellow,而不必创建Brushes的实例。

回答

5

你必须从某个地方定义静态成员,一般在.CXX文件,例如:

HBRUSH Brushes::white; 

的原因是头文件不作定义,它只是声明它。

+0

定义必须在一个翻译单元中,但它也可以通过头文件进入一个翻译单元。 –

6

您应该从struct Brushes行中删除第一个static。然后,你将需要在.cpp文件中定义的初始值(和申报内存)如下:

HBRUSH Brushes::white(some_init_value); 
HBRUSH Brushes::yellow(some_init_value); 
+2

如果您使用VC++,如果包含__declspec(selectany),则可以将这些声明放入头文件(而不是.cpp)中。很酷的伎俩。 – asveikau

2

因此,你需要:

HBRUSH Brushes::white = xxxx; 

某处在源文件中的一个。并摆脱最初的静态。

你知道Win32 GDI中的股票对象吧?