我正在尝试创建一个通用的循环缓冲区模板,但是有一些我无法理解的语法错误。错误在我的构造函数中,虽然看起来我已经以相同的方式参数化析构函数并且一个工作。我在Stroustrup C ++中遵循了这个例子,他在范围解析运算符之前和函数名中使用了一个参数,就像我一样。我也确定没有循环依赖,因为我只编译一个文件。实现和声明也在同一个文件(CircBuf.h)中,并且没有相应的.cpp文件,因此链接也不应该是一个问题。我已尝试按照this解决方案添加“内联”关键字,但我得到了同样的错误。
/* 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
答案 0 :(得分:9)
CircBuff
当然没有为某个类型命名,您想要的类型名称为CircBuf
,只有一个f
。
请注意,您还需要在构造函数和析构函数上松开尾随<T>
。