2013-10-16 2 views
0

템플릿 기반 클래스를 컴파일 할 때 링커 오류가 발생합니다. 나는 C++ 템플릿 프로그래밍과 컴파일러 (MSBuild/VS2012)의 작동에 너무 열정적이지 않고, 내가 잘못한 것을 결정하는데 어려움을 겪고있다. 내 소스 파일, 대략로 컴파일 할 때 나는 /의 CLR로 컴파일 그리고 난 (LNK2005) 링커 오류의 시리즈를 얻을 :템플릿 클래스의 링커 오류

ISaveStrategy.h :

#pragma once 
#pragma unmanaged 

template<class T> 
class ISaveStrategy 
{ 
public: 
    enum SaveResult {OK, Error}; 

    virtual SaveResult Save(const T& itemToSave) = 0; 
}; 

SaveToXmlStrategy.h :

#pragma once 

#include <gcroot.h> 
#include "ISaveStrategy.h" 

#pragma unmanaged 

namespace System{namespace Xml{ref class XmlWriter;}} 

template<class T> 
class SaveToXmlStrategy : public ISaveStrategy<T> 
{ 
public: 

    SaveToXmlStrategy(gcroot<System::Xml::XmlWriter^> writer) 
     : m_writer(writer) 
    {} 

    virtual SaveResult Save(const T& itemToSave); 

private: 
    gcroot<System::Xml::XmlWriter^> m_writer; 
}; 

SaveToXmlStrategy.cpp :

#pragma once 

#include "stdafx.h" 
#include "SaveToXmlStrategy.h" 
#include "IKeyFrame.h" 
#include "IKeyFrameTransition.h" 
#include "ICueProvider.h" 

#pragma managed 

using namespace System; 
using namespace System::Text; 

template class SaveToXmlStrategy<IKeyFrameTransition>; 
SaveToXmlStrategy<IKeyFrameTransition>::SaveResult SaveToXmlStrategy<IKeyFrameTransition>::Save(const IKeyFrameTransition& keyFrame) 
{ 
    return SaveResult::OK; 
} 


template class SaveToXmlStrategy<ICueProvider>; 
SaveToXmlStrategy<ICueProvider>::SaveResult SaveToXmlStrategy<ICueProvider>::Save(const ICueProvider& keyFrame) 
{ 
    return SaveResult::OK; 
} 


template class SaveToXmlStrategy<IKeyFrame>; 
SaveToXmlStrategy<IKeyFrame>::SaveResult SaveToXmlStrategy<IKeyFrame>::Save(const IKeyFrame& keyFrame) 
{ 
    SaveResult result = SaveResult::OK; 
    return result; 
} 

Implementation.cpp :

#pragma once 
#include "SaveToXmlStrategy.cpp" 

//inside a function body : 
ISaveStrategy<IKeyFrame>& keyFrameSaver = SaveToXmlStrategy<IKeyFrame>(xmlWriter.get()); 

답변

0

Gaar! 문제는 구현 파일에서 SaveToXmlStrategy.cpp 파일이 아니라 .h가 포함되어 있다는 것입니다. 문제가 내가 얼굴을 쳐다보고 있다는 것을 깨달았을 때까지 여기에서 내 질문을 다시 읽을 때까지는 아닙니다.

관련 문제