2014-06-10 27 views
0

我有這樣的:錯誤LNK1169:找到一個或多個多重定義的符號 - 全局函數

a.h

class a 
{ 
} 
void func(){} //some golobal function 

b.h

include "a.h" 
class b : public a 
{ 
} 

b.cpp

#include "b.h" 

我得到的錯誤:

error LNK1169: one or more multiply defined symbols found 

我覺得我得到的錯誤,因爲全局函數定義了兩次。我試圖把extern之前的功能,但是沒有工作。我也使用#ifndef..,我仍然得到錯誤。如何解決這個問題?

+0

編譯器列出了被多次定義的符號。那些符號是什麼? – doptimusprime

+0

如果'func'的定義在b.cpp文件中包含兩次,編譯器在編譯文件時會給出錯誤。 – doptimusprime

+0

可能重複[應該使用前向聲明而不是包含任何可能的內容?](http://stackoverflow.com/questions/9906402/should-one-use-forward-declarations-instead-of-includes-wherever-possible) –

回答

1

您只需要在頭文件a.h中聲明函數並在某個cpp模塊中定義它,或將其定義爲內聯函數。例如

inline void func(){} 

否則,函數將被定義爲多次,因爲有cpp模塊包含頭文件a.h或b.h.

+0

我仍然不能推斷爲什麼這會解決問題。無論如何,a.h只包含在一個編譯單元中。 – doptimusprime

+0

@dbasic那麼包含main函數的模塊呢?它是否包含a.h或b.h? –

+0

該程序可能包含也可能不包含主要取決於它是應用程序還是某個庫。這個問題必須提到。 – doptimusprime

相關問題