【问题标题】:How to implement functions with template in .cpp file when declared in .h file在 .h 文件中声明时如何在 .cpp 文件中使用模板实现函数
【发布时间】:2021-09-14 13:20:12
【问题描述】:

我正在学习 c++,并且正在使用模板。当我在带有模板的头文件中声明函数并在cpp中实现它时,它一直说"undefined reference to void do_something<SomeEnum>()"

.h 文件:

enum SomeEnum {
    Yes,
    No,
    Maybe
};


template<SomeEnum someEnum>
void do_something();
void do_something();

.cpp 文件:

#include "test.h"
#include "stdio.h"


template<SomeEnum someEnum>
void do_something() {
    printf("%d\n", someEnum);
}


void do_something() {
    printf("...\n");
}

主文件:

...main function
do_something(); // no error
do_something<Yes>(); // thrown an error

【问题讨论】:

标签: c++ templates c++14


【解决方案1】:

通常,模板函数也在头文件中定义,但如果您坚持将声明和定义分开,您可以在头文件中的模板声明之后#include ".cpp"。 (更多信息请参见Why can templates only be implemented in the header file?)。

【讨论】:

  • @rustyx - 该链接涉及不同的问题。这是关于#includeing 源文件以避免链接。这里的.cpp 文件是模板定义,通常使用.ipp 之类的扩展名。
猜你喜欢
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2021-03-07
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多