我不得不从 g++-4.6 切换到 4.7(所以我可以使用一些 C++11 功能)。现在,编译器抱怨:
In function WordJIT<float>::WordJIT(): undefined reference to JitRegType<float>::Val_t
我想知道这些编译器版本之间是否发生了一些可能影响符号解析的变化。还是在新版本(4.7)中更好地实现了语言,而我正在做的事情是错误的:(相同的代码与 4.6 一起编译)
jit.h
class Jit {
public:
enum RegType { f32=0,f64=1,u16=2,u32=3,u64=4,s16=5,s32=6,s64=7 };
// ...
};
template <class T> struct JitRegType {};
template <> struct JitRegType<float> { static const Jit::RegType Val_t = Jit::f32; };
wordjit.h
#include "jit.h"
template<class T>
class WordJIT
{
WordJIT() {
mapReg.insert( std::make_pair( JitRegType<T>::Val_t , jit.getRegs( JitRegType<T>::Val_t , 1 ) ) );
}
private:
typedef std::map< Jit::RegType , int > MapRegType;
mutable MapRegType mapReg;
};
编辑:
可以在头文件中static const
使用还是应该使用?constexpr
有没有办法Val_t
在类声明中声明JitRegType
但实际上没有定义它?