没有参数列表的模板名称'x'使用无效

invalid use of template-name 'x' without an argument list

本文关键字:无效 参数 列表      更新时间:2023-10-16

当试图使用C++从Stroustrup的编程原理和实践中编译一个示例程序时,出现了这个问题。我在第12章,他开始使用FLTK。我在图形和GUI支持代码中遇到编译器错误。特别是图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&);  
};  

完整的标题和相关的图形支持代码可以在这里找到:
http://www.stroustrup.com/Programming/Graphics/

除了代码修复之外,有人能用通俗的英语解释一下这里发生了什么吗。我才刚刚开始研究模板,所以我有一些模糊的想法,但它仍然遥不可及。感谢您,

Vector_ref(const Vector&);  <--- Line 140!

参数类型应为Vector_ref,而不是Vector。有一个打字错误。

Vector_ref& operator=(const vector&);  

这里的参数应该是vector<T>。你忘了提到类型参数。

但读到这条评论,我相信这也是一个拼写错误。你也不是说vector<T>。你的意思是:

// prevent copying  
Vector_ref(const Vector_ref&);  
Vector_ref& operator=(const Vector_ref&); 

在C++0x中,可以执行以下操作来防止复制:

// prevent copying  
Vector_ref(const Vector_ref&) = delete;            //disable copy ctor
Vector_ref& operator=(const Vector_ref&) = delete; //disable copy assignment