2015-05-19 87 views
-3
https://gist.github.com/protectivetoast83/25301772cbc6f13e6e07

神祕 「多重定義」 錯誤

我移動

#include "time.h" 

objColPhys.cpp(從objects.h繼承)的2線到線3 的對象。 h

time.h沒有包含在項目的其他地方,但是我現在越來越多定義錯誤在第9行time.h中

In function `Z7runTimev': 
multiple definition of `runTime()' 
first defined here 

也是,我不知道Z7runTimev的事情是關於因爲函數聲明爲運行時()什麼

發生了什麼,我該如何解決?

+0

http://en.wikipedia.org/wiki/Include_guard和 http://en.wikipedia.org/wiki/Name_mangling –

回答

0

您錯過了包含文件中的所有包含守衛(正如評論中提到的,爲了清楚起見,我將在此處公開它)。

當您在多個文件中包含相同的頭文件時,預處理器僅用包含文件中的所有代碼替換#include指令。因此,嵌套包含可能導致多重定義。

這可以通過簡單地添加以下代碼到你的包含文件來解決:

#ifndef _TIME_H 
#define _TIME_H 

// Header file code here 

#endif 

這保證了文件只包含一次(時代剩下的預處理器跳過該頭文件的代碼,因爲#ifndef指令)。爲了安全起見,您需要將所有包含文件添加到所有包含文件中,當然還要使用相應的命名。

許多編譯器現在支持,你需要在文件的開頭添加指令#pragma once,並避免在文件開頭具有醜#ifdef S的麻煩(當然,那個孤獨#endif末)

+0

非常感謝!我會將這些添加到我的文件中。由於_time.h_文件只包含一次,因此我對第一個得到這個錯誤的原因感到有點困惑。 **編輯:**我試圖在time.h上都包含警衛,並且我仍然在完全相同的行上得到完全相同的錯誤。 – cafemolecular

+0

你需要將它添加到每個頭文件中,同樣在objects.h中:'#ifndef _OBJECTS_H' –

+0

我在項目中的每個頭文件中都添加了頭文件,我仍然在time.h中聲明瞭所有的定義錯誤只有在time.h)。我試圖更改該文件中的項目名稱以防萬一,但我仍然在所有這些文件上發現多個定義錯誤。 – cafemolecular