这个问题已经在这里有了答案:




已关闭8年。






我已经尝试了两天了。

这是我得到的链接器错误:

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中,它将可以正常编译。

当它们在单独的文件中时,我只会收到链接器错误:/

最佳答案

功能模板必须在创建它们的相同文件中实现。 See this answer for why

关于c++ - 使用带有std::unique_ptr的模板的奇怪链接器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13402744/

10-10 22:11