2013-10-25 1 views
-2

Я видел ответы на слишком мало проблем с параметрами шаблонов в классах, но получаю аналогичную ошибку в заголовочном файле, где объявления, похоже, на уровне пространства имен. Я вовсе не ++ парень C, но я хочу, чтобы выяснить, что мне нужно исправить в этом файле, чтобы предотвратить следующую ошибку в отношении двух линий после ЬурейеГо:Errror with typedef: слишком мало шаблонов параметров шаблона

too few template-parameter-lists 

Вот файл experpt

#ifndef SH_AUDATA_H 
#define SH_AUDATA_H 

#include "BinaryIO.h" 
#include "AudioData.h" 

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

#endif // ndef SH_AUDATA_H 

Спасибо!

+1

Ваш класс 'AudioDataImpl' специализированы для' '? – xorguy

+0

Невозможно рассказать, не видя объявления 'AudioDataImpl' /' AudioData.h' –

+0

Отличный вопрос. Код для 'AudioDataImpl' [здесь] (http://tny.cz/fc125ac9). Он опирается на декларацию класса AudioData, которую я [связан здесь] (http://tny.cz/c53ca713). 'AudioData' полагается на [CvrStgObject.h] (http://tny.cz/9e20c334). – DudeGuy

ответ

3

Вы либо необходимость

  • указывают на ваше определение члена шаблона с помощью template<> (http://ideone.com/ZWYuCd)
  • или вы должны просто использовать полное имя квалифицированного класса (http://ideone.com/zsmHjG)

Контраст как:

template <typename T> struct X 
{ 
    T v; 

    void foo(); 
}; 

typedef X<int> SomeTypedef; 

#if 0 
    template<> void SomeTypedef::foo() { 
     // 
    } 
#else 
    template <typename T> void X<T>::foo() { 
     // 
    } 
#endif 


int main() 
{ 
    SomeTypedef a; 
    a.foo(); 
} 

Оба подхода для определения foo будет работать (изменить #if 0 к #if 1 «выбирать» другой подход)

Смежные вопросы