2017-04-06 78 views
0

我不明白我做錯了什麼C++ MSXML,鏈接錯誤 「的OBJ已經定義」

COMMON.H

#pragma once 
#include "Flisr.h" 
#import <msxml3.dll> named_guids 
MSXML2::IXMLDOMDocumentPtr m_plDomDocument; 
MSXML2::IXMLDOMElementPtr m_pDocRoot; 

Common.cpp

#include "Common.h" 

//some functions 

Flisr.cpp

#include "Flisr.h" 
#include "Common.h" 

//some functions from Common 

錯誤是:

error LNK2005: "class _com_ptr_t<class _com_IIID<struct MSXML2::IXMLDOMDocument,&struct __s_GUID const _GUID_2933bf81_7b36_11d2_b20e_00c04f983e60> > m_plDomDocument" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@A) already defined in Common.obj 

error LNK2005: "class _com_ptr_t<class _com_IIID<struct MSXML2::IXMLDOMElement,&struct __s_GUID const _GUID_2933bf86_7b36_11d2_b20e_00c04f983e60> > m_pDocRoot" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@A) already defined in Common.obj 

回答

0

每次"#include "Common.h",要定義一組新的對象(全局變量)的時間稱爲m_plDomDocumentm_pDocRoot。每個程序的範圍只允許其中的一個,因此它們已經被定義的錯誤。

+0

幾乎正確。應該閱讀*「每次#include」Common.h「'到一個新的編譯單元中,[*]」*。編譯單個編譯單元時,多個'#include「Common.h」'指令被#pragma once保護,不會引起任何問題。 – IInspectable