Ошибка компоновщика с шаблонным классом

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());
Теги:
templates
lnk2005

1 ответ

0

Gaar! Проблема заключалась в том, что в файле реализации я включал файл SaveToXmlStrategy.cpp, а не.h - это было только после того, как я перечитал свой вопрос здесь, что понял, что проблема смотрела мне в лицо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню