与typedef一起使用时的C ++模板错误

时间:2013-03-11 16:37:08

标签: c++ templates

我正在尝试使用g ++ 4.7.2编译最近在2003年更新的隐写术包。在头文件中,有以下语句:

typedef AudioDataImpl<AuMuLaw,BYTE> AuMuLawAudioData;
inline BYTE AuMuLawAudioData::readValue(BinaryIO *) const {return (io->read8());}

还有其他几种类似的语句,用于读取和写入各种格式的数据。编译时,会生成以下错误消息:

  

AuData.h:29:13:错误:专业成员   &#39; AudioDataImpl :: readValue&#39;要求   &#39;&模板LT;&GT;&#39;语法。

同样,会为头文件中的每一行生成这样的错误消息。

我最初认为编译器忽略了typedef语句,它似乎适当地专门化了模板,所以我用实际的模板表达式替换了typedef值,但是我得到了相同的错误,所以它不是typedef本身就是造成这个问题。模板的处理是否在2003年到今天之间发生变化,以至于此代码不再编译?

1 个答案:

答案 0 :(得分:4)

更有可能的是,代码之前根本没有在严格符合的编译器上编译。

用例如

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

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