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

您所在的位置:网站首页 变量编码错误怎么解决 C++类型重定义错误的解决方法

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

2024-07-10 21:55| 来源: 网络整理| 查看: 265

当我们想在.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; }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3