2016-09-27 26 views
0

聲明我正在使用C++多個定義與常量連接錯誤中.H

定義Constanst.h

#ifndef __CONSTANTS_H__ 
#define __CONSTANTS_H__ 

namespace A{ 
    namespace B{ 

    const int FIRST = 1; 
    const int SECOND = 2; 
    } 
} 
#endif 

我包括從2個不同的.cpp此文件中的一些常數(A.cpp和B.cpp)

GCC 3.2.3版是給我的「多重定義」鏈接錯誤

我只包括另一「File.h」,其中包括「Constants.h」解決問題,decla res與「extern」相同的常量

有人可以解釋爲什麼嗎?我想這也許是C的一個問題,而不是C++

+1

添加標頭警衛或#pragma一次 – Sugar

+0

@Sugar我認爲這沒有幫助。 – Danh

+0

這些常數是什麼類型?如果您在頭文件中聲明變量,那麼它們將在包含該頭的每個編譯單元中實例化。有很多方法可以解決這個問題,但通常當人們在頭文件中聲明變量(常量或不是)時,他們會在.c文件中定義它們。你的'extern'只是向編譯器保證變量是在其他地方定義的,並且鏈接器會希望在編譯對象中找到它們。 –

回答

0

使用g ++版本4.3.4:添加型int

constants.h:5: error: ISO C++ forbids declaration of `FIRST' with no type 

,它的工作原理。

所以,也許你應該使用一個更新的編譯器?使用g ++而不是gcc?

+0

這些文件是A.cpp和B.cpp,使用gcc還是g ++不應該是相同的嗎? – ellysisland

+0

也許不是:http://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc。無論如何:請使用較新的版本嘗試! – Rene

+0

對不起,我使用g ++,但機器是舊的RHEL 3,所以我無法更改編譯器版本,無論如何,我看到的問題可能取決於編譯器版本 – ellysisland