我有一个奇怪的错误,我无法解决这个问题。我已将其简化为一个简单的示例。我可以通过创建一个空的析构函数来修复它,但我真的很想知道发生了什么。
#include <cstdio>
#include <functional>
struct test {
inline test()
{}
const std::function<void()> f;
const int universe = 42;
};
template<size_t n = 1>
inline void do_test(const test& t = {}) {
printf("%d\n", t.universe);
}
int main(int, char**) {
// test t;
do_test();
return 0;
}
这不会编译,输出错误:
clang++ -O3 -std=c++1z -stdlib=libc++ -Wall main.cpp
Undefined symbols for architecture x86_64:
"test::~test()", referenced from:
_main in main-df96d9.o
ld: symbol(s) not found for architecture x86_64
如果您取消注释我创建 test t;
对象的行,或者从 do_test()
中删除模板参数,它将编译。
请注意,该示例过于简单,实际软件需要自定义构造函数、模板参数等。
知道它为什么提示找不到析构函数吗?
最佳答案
似乎在 clang < 4 中确认了错误。
关于c++ - 模板化函数时链接器错误未找到析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44092202/