与typedef一起使用时出现C++模板错误
问题描述:
我正在尝试使用g ++ 4.7.2编译最后更新的隐写包。在头文件中,有以下语句:与typedef一起使用时出现C++模板错误
typedef AudioDataImpl<AuMuLaw,BYTE> AuMuLawAudioData;
inline BYTE AuMuLawAudioData::readValue(BinaryIO *) const {return (io->read8());}
还有其他几种类似的用于读写各种格式数据的语句。编译时,会生成以下错误消息:
AuData.h:29:13: error: specializing member 'AudioDataImpl::readValue' requires 'template<>' syntax.
此外,类似的错误消息是针对头文件中的每一行生成的。
我最初以为编译器是ignorings typedef语句这似乎适当专门的模板,所以我换成实际的模板表达typedef的价值,但我得到同样的错误,所以它不是的typedef本身就是造成问题。处理模板是否在2003年和今天之间发生变化,以便此代码不再编译?
答
更可能的是,代码之前没有编译过严格符合标准的编译器。
将每行替换为,例如,
template<> inline BYTE AuMuLawAudioData::readValue(BinaryIO *) const {return (io->read8());}
它应该没问题。 typedef
仅影响符号AuMuLawAudioData
它不会更改整体声明的语法,因此您需要typedef<>
以指示它是模板专用化。
这样做。谢谢。 – sizzzzlerz 2013-03-11 16:52:13