头文件中一个类内部用到的结构体,应该在这个头文件的什么位置声明?如何声明?
我在XXX.h中声明了一个结构体
struct EXTRA_INFO
{
CString str;
} EXTRAINFO;
class CTreeViewEx
{
//Item额外信息数组
EXTRAINFO * m_pEI;
};
在类内使用这个结构体,但是编译器提示出错,如下:
Linking...
TreeViewEx.obj : error LNK2005: "struct EXTRA_INFO EXTRAINFO" (?EXTRAINFO@@3UEXTRA_INFO@@A) already defined in MainFrm.obj
Debug/GUI.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
GUI.exe - 2 error(s), 0 warning(s)
应该如何解决?
问题点数:26、回复次数:3Top
1 楼krh2001(边城浪子)回复于 2005-06-04 19:33:08 得分 12
typedef struct EXTRA_INFO
{
CString str;
} EXTRAINFO;
Top
2 楼littlepig_2002(小朱)回复于 2005-06-04 19:34:26 得分 0
可以的。我好像记得以前写程序的时候没有加过typedef。Top
3 楼newbiestar()回复于 2005-06-04 19:38:11 得分 14
这个是因为头文件的重复包含引起的,因为你这样的定义产生了一个struct变量,而这个变量的定义被重复包含就会出问题了……
楼上的方法可以解决。另外,如果这个struct你仅仅用在你的类里面,那么直接定义对象就可以了,如果还需要有一个名字的话,就放在private:标记后面,然后该怎么写就怎么写,这样就不会被外部其他的代码引用到了。
如果要把这个放出去被其他的代码使用的话,也只要放入public:标记后面,然后引用这个类型的时候加上类的名称,譬如
class A
{
public:
struct B{int C;}D;
};
struct A::B E;//加上struct关键字以符合struct的语义……Top




