私はこれを2日間理解しようとしています。
これが私が得ているリンカエラーです:
main.cpp:17: undefined reference to `std::unique_ptr<Foo, std::default_delete<Foo> > Bar::make_unique_pointer<Foo>()'
以下のコードは、私が抱えている問題を示しています。
Bar.h
class Bar {
public:
template <class T>
std::unique_ptr<T> make_unique_pointer();
};
Bar.cpp
#include "Bar.h"
template <class T>
std::unique_ptr<T> Bar::make_unique_pointer() {
return std::unique_ptr<T>(new T());
}
main.cpp
#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
すると、正常にコンパイルされます。
それらが別々のファイルにある場合にのみ、リンカーエラーが発生します:/