2013-03-11 162 views
1

我正在尝试使用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年和今天之间发生变化,以便此代码不再编译?

回答

4

更可能的是,代码之前没有编译过严格符合标准的编译器。

将每行替换为,例如,

template<> inline BYTE AuMuLawAudioData::readValue(BinaryIO *) const {return (io->read8());} 

它应该没问题。 typedef仅影响符号AuMuLawAudioData它不会更改整体声明的语法,因此您需要typedef<>以指示它是模板专用化。

+0

这样做。谢谢。 – sizzzzlerz 2013-03-11 16:52:13