1

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

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

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

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

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

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

4

1 回答 1

4

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

将每一行替换为,例如

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

应该没问题。typedef唯一影响符号的是AuMuLawAudioData它不会改变整体声明的语法,所以你需要在typedef<>那里表明它是一个模板专业化。

于 2013-03-11T16:45:09.117 回答