C++存在重定義的解決辦法
阿新 • • 發佈:2019-01-07
進行c++程式碼規範化程式設計練習的時候,多個頭檔案之間進行相互引用就有可能導致某個或多個頭檔案的多次編譯
編譯器就會報錯重定義
比如 TwoDimensionalShape.h中引用了 Square.h
#include "Square.h"
class TwoDimensionalShape
{
public:
virtual void show();
virtual ~TwoDimensionalShape()
{
}
};
同時Square.h檔案中也引用了TwoDimensionalShape.h
這樣在主函式中又得引用Square.h和TwoDimensionalShape.h#include"TwoDimenSionalShape.h" class Square:public TwoDimensionalShape { private: double side; //正方形邊長 public: Square(); //預設建構函式 Square(double side); //帶一個引數的建構函式 void setSide(double side); //設定邊長函式 double getArea();//獲取面積 void show(); //重寫基類的輸出資訊函式 virtual ~Square() { } };
顯然,標頭檔案Square.h和TwoDimensionalShape.h進行了多次編譯,編譯器就會報錯
#include #include"Square.h" #include"TwoDimenSionalShape.h" using namespace std; int main() { TwoDimensionalShape t; Square s1; s1.setSide(6); Square s2(3); TwoDimensionalShape *merbers[3]; merbers[0] = &t; merbers[1] = &s1; merbers[2] = &s2; for (int i = 0; i < 3; i++) { merbers[i]->show(); } return 0; }
解決方法是在標頭檔案前面加#pragma once
這樣就能保證標頭檔案只編譯一次