gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:00:15 24 4
gpt4 key购买 nike

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

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.

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

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

最佳答案

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

将每一行替换为,例如

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

应该没问题。 typedef只影响符号 AuMuLawAudioData它不会更改整体声明的语法,因此您需要 typedef<>那里表明它是一个模板特化。

关于与 typedef 一起使用时出现 C++ 模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15343804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com