c++ 頭文件重複問題

感謝:https://blog.csdn.net/u010757264/article/details/50075343ios

  在C++程序設計過程當中,通常將類的聲明、類的定義分開, 將類的聲明放在.h的頭文件中, 將類的定義放在.cpp的源文件中,這樣使得程序設計模塊分明。函數

  可是每每會出現典型問題:重複定義問題。若是一個類派生出一個類,派生類聲明時須要包含基類的頭文件,若是再在主函數包含這個頭文件, 編譯時就報錯, 編譯器出現重複定義的問題, 給出重定義錯誤提示。spa

 

例子:首先在新建工程下新建兩個.h的頭文件(文件名分別爲people.h和student.h),繼續新建三個.cpp的源文件(文件名分別是people.cpp、student.cpp、main.cpp),而後編輯相應代碼。.net

// people.h頭文件設計

#include<iostream>blog

using namespace std;繼承

class people{get

public:編譯器

void breath();io

};

 

// student.h 頭文件    // 定義一個類student,從類people繼承獲得,重寫成員函數breath()

#include "people.h"

#include<iostream>

using namespace std;

class student:public people{

public:

void breath();

}

 

// people.cpp源文件    // 定義類people的breath()方法

#include "people.h"

void people:breath(){

cout <<"people" << endl;

}

 

// student.cpp源文件    // 重寫類student的breath()方法

#include "student.h"

void student:breath(){

cout << "student" << endl;

}

 

// main.cpp 源文件

#include "pepple.h"

#include "student.h"

int main(){

  people p;

  student s;

  p.breath();

  s.breath();

  return 0;

}

  對三個cpp進行編譯,對於people.cpp和student.cpp編譯時,沒有錯誤,可是對main.cpp進行編譯時會出現類重複定義錯誤。由於"people.h"被定義了兩次,編譯器會報錯。

  對於輕量程序,經過將全部代碼寫在一個源文件中,包括類的聲明和定義,還有主函數,這樣不用寫#include "people.h"和#include "student.h"。可是對於大程序,這種方式很差,由於不只會讓代碼顯得冗長並且代碼邏輯沒有條理。

  所以,對於這種狀況,最經常使用的方法是用條件編譯#ifndef...#define...#endif語句。修改上面people.h和student.h文件。

相關文章
相關標籤/搜索