我有在Utility工具名稱空間中定義的全局變量。這個工具包含在幾個文件中,它看起來是這樣的:避免「已經在......中定義」錯誤/在C++中衝突無類變量
#ifndef _UT_
#define _UT_
namespace UT {
std::string PLATFORM_LINUX_NAME = "linux";
std::string PLATFORM_MACOSX_NAME = "macosx";
std::string PLATFORM_WINDOWS_NAME = "windows";
#if defined(OS_WIN)
int PLATFORM = OSTYPE::PLATFORM_WINDOWS;
#elif defined(OS_LINUX)
int PLATFORM = PLATFORM_LINUX;
#elif defined(OS_APPLE)
int PLATFORM = PLATFORM_MACOSX;
#endif
};
當我包括例如文件阿和bh和Ch這個文件,我得到一個編譯器警告,說:
warning LNK4006: "int UT::PLATFORM" ([email protected]@@3HA) already defined in A.obj; second definition ignored
warning LNK4006: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > UT::PLATFORM_LINUX_NAME" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@A) already defined in A.obj; second definition ignored
什麼是最好的方式,不涉及創建一個類來解決這個問題? 或者正在創建一個UT類的唯一方法?
你應該知道,開始以下劃線後跟一個大寫字母標識符,如'_UT_',被保留用於編譯器。例如在這個問題中看到詳細信息:http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier –
順便說一下,也許你應該也將它們分組在一個枚舉中,只是爲了清晰起見... –