template <class STR ,LENGTH SIZE = VAR_FILL> class TextRStream { public: static constexpr LENGTH DELIMITERS_SIZE = 32 ; static constexpr LENGTH ESCAPES_SIZE = 32 ; private: static constexpr STR STR_SLASH = STR ("\") ; static constexpr STR STR_EOS = STR ("\0") ;
部分代码
g++一编译就这样
temp.cpp:(.text$_ZN3CSC11TextRStreamIwLin1EEC1ERKNS_6BufferIwLin1EEEii[__ZN3CSC11TextRStreamIwLin1EEC1ERKNS_6BufferIwLin1EEEii]+0xd6): undefined reference to `CSC::TextRStream<wchar_t, -1>::STR_SLASH”
temp.cpp:(.text$_ZN3CSC11TextRStreamIwLin1EEC1ERKNS_6BufferIwLin1EEEii[__ZN3CSC11TextRStreamIwLin1EEC1ERKNS_6BufferIwLin1EEEii]+0xdd): undefined reference to `CSC::TextRStream<wchar_t, -1>::STR_SLASH”
讲道理constexpr的变量不需要类外初始化的吧,编译器应该保证将它们全部内联才对
解决方案
50
取地址或初始化引用:
错误是本人将STR_SLASH放入容器里,而那容器的add函数只接受const T &和T &&类型的值,而且本人封装也不会考虑每一种模板参数啊
你把代码上全了吧,才不出来你怎么用的就错了,应该是能用表达式的地方都能用 constexpr。