2

可能重复:
为什么模板只能在头文件中实现?

我已经尝试了 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其中,它将编译得很好。

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

4

1 回答 1

2

函数模板必须在创建它们的同一文件中实现。请参阅此答案以了解原因

于 2012-11-15T17:16:17.410 回答