可能重复:
为什么模板只能在头文件中实现?
我已经尝试了 2 天来解决这个问题。
这是我得到的链接器错误:
main.cpp:17: undefined reference to `std::unique_ptr<Foo, std::default_delete<Foo> > Bar::make_unique_pointer<Foo>()'
下面的代码演示了我遇到的问题。
酒吧.h
class Bar {
public:
template <class T>
std::unique_ptr<T> make_unique_pointer();
};
条形图.cpp
#include "Bar.h"
template <class T>
std::unique_ptr<T> Bar::make_unique_pointer() {
return std::unique_ptr<T>(new T());
}
主文件
#include "Bar.h"
struct Foo {};
int main() {
Bar bar;
auto p = bar.make_unique_pointer<Foo>();
return 0;
}
但是,如果我内联定义函数,它可以工作
class Bar {
public:
template <class T>
std::unique_ptr<T> make_unique_pointer() {
return std::unique_ptr<T>(new T());
}
};
或者,如果我将定义放入main.cpp
或什至Bar.h
其中,它将编译得很好。
当它们位于单独的文件中时,我只会收到链接器错误:/