我知道是怎麼回事,但我不知道如何解決這個問題:多重定義,如何原型std :: map?
的main.cpp
#include "Win32.h"
int main() {
return 0;
}
Win32.h
#include <windows.h>
#include <map>
#ifndef WIN32_H_
#define WIN32_H_
namespace W32 {
class Win32; // Pre-Declaration
std::map<HWND, Win32 *> windowMap; // Handle to Class instance mapping
class Win32 {
public:
Win32();
virtual ~Win32();
protected:
private:
}; // Class Win32
} // namespace W32
#endif // WIN32_H_
Win32.cpp
#include "Win32.h"
namespace W32 {
Win32::Win32() {
}
Win32::~Win32() {
}
} /* namespace W32 */
錯誤消息:
src\Win32.o: In function `Win32':
D:\Dev\Projects\Eclipse\OpenGL3\Debug/../src/Win32.cpp:7: multiple definition of `W32::windowMap'
src\main.o:D:\Dev\Projects\Eclipse\OpenGL3\Debug/../src/main.cpp:14: first defined here
好吧,我知道std::map<HWND, Win32 *> windowMap;
出現在更多的一個文件中,並且因爲它包含在多個文件(main.cpp/Win32.cpp)中,導致它被重新定義。我對std :: map還是有點新鮮。我需要做的是原型windowMap
,但我不知道的是如何?我認爲這是當我抓住這段代碼。 Win32類需要能夠使用它,但它必須被聲明才能這樣做,但我所擁有的不是這樣做的,我無法找到正確的方法來獲得正確的有關如何正確轉發申報std::map<HWND, Win32 *> windowMap
的信息。
也許'extern'? –
除了'Win32'外,還有其他的代碼需要使用'windowMap'嗎? – hmjd
關於使用像'std :: map'這樣的非POD類型的全局實例,您可能需要閱讀[this point](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Static_and_Global_Variables)的Google C++風格指南。 – 2012-05-28 11:01:05