c – 链接器错误(未定义的引用)与`static constexpr const char
参见英文答案 >
Undefined reference to static constexpr char[]????????????????????????????????????5个
#include <iostream> using namespace std; template<typename T> void print(T&& mX) { std::cout << std::forward<T>(mX) << std::endl; } struct SomeStruct { static constexpr const char* someString{"hello!"}; SomeStruct() { print(someString); } }; int main() { SomeStruct s{}; return 0; } clang -std = c 1y ./code.cpp -o code.o
g -std = c 1y ./code.cpp -o code.o
为什么会发生此链接器错误?是不是someString应该在编译时可解析? 此外,如果用cout<<替换print(someString),则不会发生错误. someString; 解决方法
因为您正在参考该变量是使用odr并且这需要一个超出定义的定义:
constexpr const char* SomeStruct::someString; see it working live. 从草案C 14标准第3.2节[basic.def.odr]:
例如,以下替代打印不会使用someString: template<typename T> void print(T mX) { std::cout << mX << std::endl; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |