c++ 使用模板的多个定义错误

Posted

技术标签:

【中文标题】c++ 使用模板的多个定义错误【英文标题】:c++ multiple definition errors using templates 【发布时间】:2013-07-15 02:17:17 【问题描述】:

我是基于模板编程的新手,在编译我的项目时出现此错误

error : multiple definition of Expr::Chapter_2<double>::get_pointer() 
objectfile.o:/Filename.h:42 first defined here.

给定的代码完全在 .h 头文件中。非常感谢任何解决此问题的指针。

代码:

template< typename T >
class Chapter_2

-------
public :
    inline T* get_pointer();
-------
;

// Function definitions
template< typename T >
T* Chapter_2<T>::get_pointer() 
    ------code------


// double specialization of template
template<>
double* Chapter_2<double>::get_pointer() 
    ------code------

【问题讨论】:

您不应该将模板类分隔为 .h 和 .cpp 你guard your header against multiple-inclusion了吗? 【参考方案1】:

可能的原因:

1)如果您的标头不是以 #ifndef 开头,并且您包含相同的标头 两次 或更多。

2) 在包含包含模板的标头的 cpp 文件中,如果您再次定义了方法(多个定义,即在 cpp 和 .h 中)。模板中方法的实现应该在同一个地方定义一次

【讨论】:

以上是关于c++ 使用模板的多个定义错误的主要内容,如果未能解决你的问题,请参考以下文章

Python 错误:在 SWIG 生成的 C++ 模板代码模块中未定义构造函数

使用 MatLab dll 时出现 C++ 错误:找到一个或多个多重定义符号

错误多个指令 [bar, bar] 在使用自定义指令和 angular-bootstrap 时要求模板

多个定义的符号 C++ 错误

致命错误 LNK1169:找到一个或多个多重定义符号 (C++)

C++ 链接错误与 Linux 上的多个定义