c++模板特化链接器错误
C++ Template specialization linker error
当我有模板专门化时,我如何从cpp文件分离头文件?
我看过一些关于如何通过在头文件的末尾包含cpp文件来将头文件与模板的实现分开的帖子。但是,当我必须使用模板专门化时,这种策略就不起作用了。
这是我的头文件
#ifndef H_SUM_H
#define H_SUM_H
#include <map>
#include <string>
template <typename T>
double Sum(const T &source);
template <>
double Sum(const std::map<std::string, double> &source);
#ifndef CPP_SUM_CPP
#include "Sum.cpp"
#endif
#endif
这是我的实现文件
#ifndef CPP_SUM_CPP
#define CPP_SUM_CPP
#include "Sum.h"
template <typename T>
double Sum(const T &source){//code//}
template <>
double Sum(const std::map<std::string, double> &source){//code//}
#endif
两点:
1)如果我删除模板专门化,一切都可以正常工作
当我包含cpp文件(对于模板专门化的情况)时,代码#ifndef CPP_SUM_CPP
#include "Sum.cpp"
#endif
是灰色的(在VC 2010中),并标记为块代码!!
任何想法?
谢谢
你的源文件只能有template<>
, <>
里面什么都没有,函数/方法不能部分专门化。泛型类型只能存在于头文件中。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 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链接错误