模板类中构造函数的语法

xst*_*xst 5 c++ templates compiler-errors

我试图创建一个通用的循环缓冲模板,但有一些我无法理解的语法错误.错误在我的构造函数中,虽然看起来我已经以相同的方式参数化析构函数并且一个工作.我在Stroustrup C++中遵循了这个例子,他在范围解析运算符之前和函数名中使用了一个参数,就像我一样.我也确定没有循环依赖,因为我只编译一个文件.此外,实现和声明都在同一个文件(CircBuf.h)中,并且没有相应的.cpp文件,因此链接也不应成为问题.我已经尝试根据解决方案添加"内联"关键字,我得到相同的错误.

/* CircBuf.h */
template<typename T> class CircBuf {
  // don't use default ctor                                                                                                                                               
  CircBuf();

  int size;
  T *data;
public:
  CircBuf(int);
  ~CircBuf();
};

template<typename T> CircBuff<T>::CircBuf<T>(int i) {
  data = new T[i];
}
template<typename T> CircBuf<T>::~CircBuf<T>() {
  delete data;
}
Run Code Online (Sandbox Code Playgroud)

生成文件

all:
        g++ -g -pedantic CircBuf.h -o prog
Run Code Online (Sandbox Code Playgroud)

编译器错误

CircBuf.h:13:22: error: ‘CircBuff’ does not name a type
Run Code Online (Sandbox Code Playgroud)

K-b*_*llo 9

CircBuff当然不会命名一个类型,你打算CircBuf用一个类型的名称f.

请注意,您还需要松开<T>构造函数和析构函数上的尾部.

  • 哇我简直不敢相信我犯了那个错误 (5认同)