C++类型重定义错误的解决方法
2017-01-20 15:50
453 查看
当我们想在.h声明中定义成员变量,有时会报类型重定义错误,如果不是工程中真的重复定义了多个同名类,那么多半是没有给该类的头文件加条件指示符#ifndef,条件指示符#ifndef 最主要的目的就是防止头文件的重复包含和编译,这样才能保证头文件被多个其他文件引用时,内部的数据不会被多次定义而造成错误。解决方法有两种:
方法一:在报类型重定义的类的头文件,最上方加两行:
最下方加一行:
(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;
}
方法一:在报类型重定义的类的头文件,最上方加两行:
#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;
}
相关文章推荐
- C# 001 --- 正确的删除一个控件的事件函数 --- 解决错误: “A”不包含“B”的定义,并且找不到可接受类型为“A”的第一个参数的扩展方法“B”(是否缺少 using 指令或程序集引用?)
- C++学习一错误解决_类型未定义
- C++ 解析什么叫“class”类型重定义还有解决方法
- C++解决类二次定义错误的方法
- C++错误:重定义 不同的存储类 二次定义的解决方法
- C++ 错误error C2011:类型重定义的解决办法
- C++模板函数中含有数据类型成员时导致编译错误(显示未知类型)的解决方法
- 类语句.NET下编译C++代码时出现"error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int"错误的解决方法。
- error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认int 错误的解决方法
- error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int"错误的解决方法
- error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 错误的解决方法
- error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 错误的解决方法
- c++构造函数不能有返回类型错误提示?解决方法!
- error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 错误的解决方法
- .NET下编译C++代码时出现"error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int"错误的解决方法。
- VS2010升级VS2013后,出现没有定义类型“PowerPacks.ShapeContainer”错误解决方法
- 类型“GridView”的控件 必须放在具有 runat=server 的窗体标记内 错误的解决方法
- 关于Ajax 错误:'sys'未定义解决方法.
- 将VARCHAR值""转换为数据类型为"int"的列时发生语法错误!的解决方法
- 关于Ajax 错误:'sys'未定义解决方法.