C++型別重定義錯誤的解決方法
阿新 • • 發佈:2019-02-02
當我們想在.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; }