模板化类的链接器错误
Linker Error with templated class
我在尝试编译模板化类时遇到链接器错误。 我对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;
}
实施.cpp:
#pragma once
#include "SaveToXmlStrategy.cpp"
//inside a function body :
ISaveStrategy<IKeyFrame>& keyFrameSaver = SaveToXmlStrategy<IKeyFrame>(xmlWriter.get());
Gaar! 问题是在实现文件中,我包括SaveToXmlStrategy.cpp文件,而不是.h - 直到我在这里重新阅读我的问题,我才意识到问题正盯着我的脸!
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误