gpt4 book ai didi

c++ - 使用带有 std::unique_ptr 的模板的奇怪链接器错误

转载 作者:行者123 更新时间:2023-11-30 04:23:21 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Why can templates only be implemented in the header file?

我已经尝试解决这个问题 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 中,它会编译正常。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com