C++类型重定义错误的解决方法

来源:互联网 发布:28岁未成年网络剧 编辑:程序博客网 时间:2024/04/28 22:55

当我们想在.h声明中定义成员变量,有时会报类型重定义错误,如果不是工程中真的重复定义了多个同名类,那么多半是没有给该类的头文件加条件指示符#ifndef,条件指示符#ifndef 最主要的目的就是防止头文件的重复包含和编译,这样才能保证头文件被多个其他文件引用时,内部的数据不会被多次定义而造成错误。解决方法有两种:

方法一:在报类型重定义的类的头文件,最上方加两行:

#ifndef XXXX_H#define XXXX_H

    最下方加一行:

#endif //XXXX_H

    (XXXX_H是xxxx.h的大写形式)

    在生成一下,重定义的错误就不见了。

方法二:有的时候就是忘记加方法一种的条件指示符,还不想报错,该怎么办呢,可以在声明该成员变量的头文件中不去#include该类,而是定义一个同名类class XXXX;然后声明一个指针XXXX *m_pXxxx;接着,在.cpp文件中#include该类,然后new一个该类型的指针m_pXxxx=new XXXX();接下来直接使用m_pXxxx即可,这时有没有方法一中的条件指示符都不会报错了。

    例如:在GoScanClass.h中定义的一个类GoScan,想在depthview.cpp中使用,如何在depthview.h中声明成员,在depthview.cpp中定义变量呢?如下:

/*depthview.h*/

//#include "GoScanClass.h"class GoScan;......public:GoScan *m_pScanValue;


/*depthview.cpp*/

#include "GoScanClass.h"DepthView::DepthView(QWidget *parent):QWidget(parent){m_pScanValue = new GoScan();m_pScanValue->OpenAndStart();//OpenAndStart()是GoScan类的一个方法......}DepthView::~DepthView(){delete m_pScanValue;m_pScanValue = NULL;}


0 1