2013-03-11 167 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