2011-12-29 103 views
0

我有一個文件example1.cppmain函數。這個文件必須有#include mylib.h#include lib.h。檔案mylib.h也有#include lib.h。當我嘗試編譯該程序時,出現錯誤redefinition xyz function重新定義函數

example1.cpp

#include mylib.h 
#include lib.h 

int main(){ 
//code 
} 

mylib.h

#include lib.h 

//rest code 
+3

顯示在頭文件中的代碼請,還可以使用複製/粘貼顯示 – 2011-12-29 23:11:01

+3

您正在使用包括警衛實際的錯誤信息? – 2011-12-29 23:13:13

+0

@ userr902691如果其中一個解決了您的問題,請不要忘記[接受](http://stackoverflow.com/faq#howtoask)最能解決您問題的答案。 – 2011-12-30 21:02:28

回答

4

您必須包裝在#define語句的.h文件,以避免redifinitions。例如:

#if !defined(_MY_LIB_H_) 
#define _MY_LIB_H_ 

// Add your function definitions here... 

#endif // _MY_LIB_H_ 

您現在可以將其包含在任何地方,並且函數定義將被讀取一次。另請注意,您可以使用#ifndef,具體取決於編譯器。 VC++例如,允許「的#pragma一次」,如果是10或更高版本:

#if _MSC_VER > 1000 
#pragma once 
#endif 

在這種情況下,你不需要使用#定義如上所述。

+4

您應該從'_MY_LIB_H_'中刪除前導下劃線。 C++ 98標準17.4.3.1.2說:「每個包含雙下劃線的名稱或者以下劃線開頭,後面跟着大寫字母的字符都保留給實施用於任何用途。」 – 2011-12-29 23:24:19

+1

同樣,C99和C11標準中也有一個條款(問題標有C和C++)。 – dreamlax 2011-12-30 08:04:22

7

您需要將include guards放在頭文件中,以防止它在編譯過程中被多次包含。

#ifndef LIB_H 
#define LIB_H 

// Actual header file code 

#endif 
相關問題