C++ typedef错误:模板参数列表太少

C++ typedef错误:模板参数列表太少,c++,c++11,C++,C++11,我已经看到一些对类中模板参数列表太少问题的响应,但是在一个头文件中,我得到了一个类似的错误,其中声明似乎位于名称空间级别。我不是一个C++的家伙,但我想找出我需要纠正什么在这个文件,以防止以下错误的两行后的TyPulf:< /P> too few template-parameter-lists 这是一个文件摘录 #ifndef SH_AUDATA_H #define SH_AUDATA_H #include "BinaryIO.h" #include "AudioData.h" // A

我已经看到一些对类中模板参数列表太少问题的响应,但是在一个头文件中,我得到了一个类似的错误,其中声明似乎位于名称空间级别。我不是一个C++的家伙,但我想找出我需要纠正什么在这个文件,以防止以下错误的两行后的TyPulf:< /P>
too few template-parameter-lists
这是一个文件摘录

#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
\ifndef SH_AUDATA_H
#定义SH_AUDATA_H
#包括“Binaryo.h”
#包括“AudioData.h”
//奥穆拉瓦迪奥达酒店
typedef AudioDataImpl AuMuLawAudioData;
内联字节AuMuLawAudioData::readValue(BinaryIO*io)常量{return(io->read8());}
内联void AuMuLawAudioData::writeValue(二进制io*io,字节v)常量{io->write8(v);}
#endif//ndef SH_AUDATA_H
谢谢

你要么需要

  • 指示您使用
    模板
    ()定义模板成员
  • 或者您应该只使用完整的限定类名()
对比两者:

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();
}
模板结构X
{
电视
void foo();
};
typedef X SomeTypedef;
#如果0
模板void SomeTypedef::foo(){
//
}
#否则
模板void X::foo(){
//
}
#恩迪夫
int main()
{
a型;
a、 foo();
}

定义
foo
的两种方法都会起作用(将
#if 0
更改为
#if 1
以“选择”另一种方法)

是您的
AudioDataImpl
类专用于
?如果不看
AudioDataImpl
声明/
AudioData.h
就无法判断问题了。
AudioDataImpl
的代码为。它依赖于我刚才提到的
AudioData
类声明
AudioData
依赖于,因此,不要“有益地”链接到外部的代码墙(使问题对于将来的参考毫无用处),而是将问题简化为一个简单的问题。请看我的答案中的一个例子:)@sehe。谢谢你的洞察力。我不确定什么信息是必要的,但我应该包括更多。你认为我应该修改原来的问题吗?