您的位置:首页 > 编程语言 > C语言/C++

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

2017-01-20 15:50 453 查看
当我们想在.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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  QT
相关文章推荐