说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

一个编译时候的错误,谁来帮帮我?

编辑:说三道四文库 发布时间:2018-02-18 09:19
HTML文档下载 WORD文档下载 PDF文档下载
我将一个COLORREF数组定义在VIEW.H中,定义方式如下:

COLORREF arColors[5] =
{
RGB(0,0,0),
RGB(255,0,0),
RGB(0,255,0),
RGB(0,0,255),
RGB(255,255,255)
};

有时候就会在编译的时候出现下面这样的错误

MyDrawView.obj : error LNK2005: "unsigned long *  arColors" (?arColors@@3PAKA) already defined in MyDraw.obj

可是当我将定义方式改成
static COLORREF arColors[5] =
{
RGB(0,0,0),
RGB(255,0,0),
RGB(0,255,0),
RGB(0,0,255),
RGB(255,255,255)
};
就不会再有这个问题了,为什么呀?谁能告诉我,谢谢了。
这完全是C++的概念,在VC中要求更为严格,
在VC中定义树组最好在.hpp中定义。
view.h:

extern COLORREF arColors[5];

view.cpp:
COLORREF arColors[5] =
{
    RGB(0,0,0),
    RGB(255,0,0),
    RGB(0,255,0),
    RGB(0,0,255),
    RGB(255,255,255)
};
最好不要在头文件中定义变量,如果被多个.cpp文件包含,就会报上述错误。如果添加了static,该变量只在当前头文件可见。
When modifying a variable or function at file scope, the static keyword specifies that the variable or function has internal linkage (its name is not visible from outside the file in which it is declared). 
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘