6

我正在尝试创建一个通用的循环缓冲区模板,但有一些我无法理解的语法错误。错误出现在我的构造函数中,尽管我似乎已经以相同的方式参数化了析构函数并且那个方法有效。我遵循了 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;
}

生成文件

all:
        g++ -g -pedantic CircBuf.h -o prog

编译器错误

CircBuf.h:13:22: error: ‘CircBuff’ does not name a type
4

1 回答 1

9

CircBuff当然没有命名类型,您想要的类型的名称是CircBuf单个f.

请注意,您还需要丢失<T>构造函数和析构函数的尾随。

于 2012-06-07T20:19:51.990 回答