Rob*_*lls 0 c++ templates arguments compiler-errors
当尝试使用C++从Stroustrup的编程原理和实践编译示例程序时出现了这个问题.我在第12章,他开始使用FLTK.我在图形和GUI支持代码中遇到编译器错误.特别是Graph.h第140和141行:
error: invalid use of template-name 'Vector' without an argument list
error: ISO C++ forbids declaration of 'parameter' with no type
template<class T> class Vector_ref {
vector<T*> v;
vector<T*> owned;
public:
Vector_ref() {}
Vector_ref(T& a) { push_back(a); }
Vector_ref(T& a, T& b);
Vector_ref(T& a, T& b, T& c);
Vector_ref(T* a, T* b = 0, T* c = 0, T* d = 0)
{
if (a) push_back(a);
if (b) push_back(b);
if (c) push_back(c);
if (d) push_back(d);
}
~Vector_ref() { for (int i=0; i<owned.size(); ++i) delete owned[i]; }
void push_back(T& s) { v.push_back(&s); }
void push_back(T* p) { v.push_back(p); owned.push_back(p); }
T& operator[](int i) { return *v[i]; }
const T& operator[](int i) const { return *v[i]; }
int size() const { return v.size(); }
private: // prevent copying
Vector_ref(const Vector&); <--- Line 140!
Vector_ref& operator=(const vector&);
};
Run Code Online (Sandbox Code Playgroud)
完整的标题和相关的图形支持代码可以在这里找到:http:
//www.stroustrup.com/Programming/Graphics/
除了代码修复,有人可以用简单的英语说明这里发生的事情.我刚刚开始研究模板,所以我有一些模糊的想法,但它仍然遥不可及.太感谢了,
Vector_ref(const Vector&); <--- Line 140!
Run Code Online (Sandbox Code Playgroud)
参数类型应该是Vector_ref,而不是Vector.有一个错字.
Vector_ref& operator=(const vector&);
Run Code Online (Sandbox Code Playgroud)
这里的参数应该是vector<T>.你忘了提及类型参数.
但阅读评论,我相信它也是一个错字.你也不是说vector<T>.你的意思是:
// prevent copying
Vector_ref(const Vector_ref&);
Vector_ref& operator=(const Vector_ref&);
Run Code Online (Sandbox Code Playgroud)
在C++ 0x中,您可以执行以下操作以防止复制:
// prevent copying
Vector_ref(const Vector_ref&) = delete; //disable copy ctor
Vector_ref& operator=(const Vector_ref&) = delete; //disable copy assignment
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9769 次 |
| 最近记录: |