使用Type的C++模板错误

使用Type的C++模板错误,c++,templates,C++,Templates,我正在尝试编译一个隐写术包,上一次更新是在2003年,使用的是g++4.7.2。在头文件中,有以下语句: typedef AudioDataImpl<AuMuLaw,BYTE> AuMuLawAudioData; inline BYTE AuMuLawAudioData::readValue(BinaryIO *) const {return (io->read8());} 还有其他几个类似的语句用于读取和写入各种格式的数据。编译时,将生成以下错误消息: AuData.h:2

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

typedef AudioDataImpl<AuMuLaw,BYTE> AuMuLawAudioData;
inline BYTE AuMuLawAudioData::readValue(BinaryIO *) const {return (io->read8());}
还有其他几个类似的语句用于读取和写入各种格式的数据。编译时,将生成以下错误消息:

AuData.h:29:13:错误:成员 “AudioDataImpl::readValue”需要 “模板”语法

同样,头文件中的每一行都会产生类似这样的错误消息


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

更可能的是,此代码以前没有在严格符合标准的编译器上编译过

将每条管路更换为,例如

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

应该没问题。typedef只影响符号AuMuLawAudioData,它不会更改整个声明的语法,因此您需要这里的typedef来指示它是一个模板专门化。更可能的是,该代码之前没有在严格一致的编译器上编译

将每条管路更换为,例如

template<> inline BYTE AuMuLawAudioData::readValue(BinaryIO *) const {return (io->read8());}
应该没问题。typedef只影响符号AuMuLawAudioData,它不会更改整个声明的语法,因此您需要在那里使用typedef来指示它是一个模板专门化