我在我的文件中添加了一些const字符。我得到的錯誤是重複的符號_xyz(說)。它有什麼問題,我怎麼能擺脫這一點。重複的符號錯誤C++
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
我在我的文件中添加了一些const字符。我得到的錯誤是重複的符號_xyz(說)。它有什麼問題,我怎麼能擺脫這一點。重複的符號錯誤C++
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
如果這是一個頭文件,你在你每次#include
它定義xyz
。
您可以將聲明更改爲@R Samuel Klatchko所示。通常的方式(如果該數據不是const
)是這樣的:
在Abc.h:
extern char *xyz;
在Abc.cpp:
char *xyz = "xyz";
編輯補充
請注意,標頭警衛將不是解決此問題:
#ifndef XYZ_H
#define XYZ_H
...
#endif
標題保護可防止「重新定義」錯誤,其中相同的符號在同一個編譯單元中出現兩次。這是一個編譯器錯誤。
不過,即使頭守衛的xyz
定義仍然會出現在包括它的每一個源文件,造成「重複的符號」錯誤,這是一個連接錯誤。
如果原始海報當然提到過,那將會更有幫助。
請提供一個有意義的問題描述。什麼是「我的文件」?你正在考慮什麼「常量字符」?
對於您所提供的內容,我只能猜測您將xyz
的上述定義添加到頭文件中,然後將其包含到多個翻譯單元中。結果:對象xyz
被定義了多次。因此錯誤。
問題是包含頭文件的每個源文件都會通過外部鏈接獲取它自己的xyz
副本。
解決這個問題的最簡單方法是給xyz
內部鏈接。你可以做到這一點使得指針本身是常量,除了具有基本字符的常量:
const char* const xyz = "xyz";
+1這是最好的解決方案。 'const'總是很好。 – 2010-05-24 07:06:08
const絕對是好的,但這只是隱藏了現在每個文件都有相同數據的實例的問題。 – 2010-05-24 14:54:48
聲明一個變量多次是不是一個錯誤(如果它是不一樣的翻譯單元內)。定義它是。 – 2013-12-09 06:21:21
我應該抓住這一點,謝謝。 – egrunin 2013-12-09 17:39:33
感謝球隊後衛的澄清。這是一件很奇怪的事情 - 如果我在頭文件中定義了一個函數,我只會得到重複符號的鏈接器錯誤。在我目前的情況下,我有一堆常量和一些頭函數中定義的函數 - 我只爲函數獲取鏈接器錯誤,const的確定。這是爲什麼? – 2017-05-04 12:23:28