0

我对 C++ 相当陌生,并且使用它创建类,尤其是使用模板类。我收到了很多错误消息,我不确定如何修复它们,希望这里有人能提供帮助,在此先感谢。

班上:

template <class T> class Vector {
    public:
        typedef T* iterator;
        Vector();
        iterator begin();
        iterator end();
        int size();
        iterator insert(iterator position, const T& item);
        void alloc_new();

    private:
        T items;
        int used;      
};

template <class T> Vector::Vector() { 
    items = [1000];
    used = 0;
}

template <class T> iterator Vector::begin() {
   return items; 
}

template <class T> iterator Vector::end(){
    return items + used;
}

template <class T> int Vector::size() {
    return used;
}

template <class T> iterator Vector::insert(iterator position, const T& item){

    if (used+1 > items){
        alloc_new();}  

    items[position] = item;
    used =+ 1;

}

template <class T> void Vector::alloc_new(){
        items = used*2;
        T tmp[] = items;

        for (int i = 0; i < used; i++){
            tmp[i] = items[i];
        } 
        delete items;
        items = tmp;
    }

错误消息:

main.cpp:67:错误:“模板类向量”在没有模板参数的情况下使用
main.cpp:67:错误:ISO C++ 禁止声明没有类型的“向量”
main.cpp:67:错误:模板“模板 int Vector()”的声明
main.cpp:52:错误:与先前的声明“模板类向量”冲突
main.cpp:52:错误:先前的非函数声明“模板类向量”
main.cpp:67:错误:与函数声明“模板 int Vector()”冲突
main.cpp:在函数“int Vector()”中:
main.cpp:68: error: `items' undeclared (首先使用这个函数)
main.cpp:68: 错误:(每个未声明的标识符对于它出现的每个函数只报告一次。)
main.cpp:68:错误:“[”标记之前的预期主表达式
main.cpp:69: error: `used' undeclared (首先使用这个函数)
main.cpp:在全局范围内:
main.cpp:72:错误:“Vector”之前的预期构造函数、析构函数或类型转换
main.cpp:72:错误:预期的 `;' 在“矢量”之前
main.cpp:76:错误:“Vector”之前的预期构造函数、析构函数或类型转换
main.cpp:76:错误:预期的 `;' 在“矢量”之前
main.cpp:80:错误:“模板类向量”在没有模板参数的情况下使用
main.cpp:在函数“int size()”中:
main.cpp:81: error: `used' undeclared (首先使用这个函数)
main.cpp:在全局范围内:
main.cpp:84:错误:“向量”之前的预期构造函数、析构函数或类型转换
main.cpp:84:错误:预期的 `;' 在“矢量”之前
main.cpp:94:错误:“模板类向量”在没有模板参数的情况下使用
main.cpp:在函数“void alloc_new()”中:
main.cpp:95: error: `items' undeclared (首先使用这个函数)
main.cpp:95: error: `used' undeclared (首先使用这个函数)
4

3 回答 3

1
  1. Vector::vector()需要更改为Vector<T>::vector(). 以下成员函数也是如此。
  2. iterator需要在前面加上Vector<T>asVector<T>::iterator因为iterator在类中声明Vector
于 2013-10-11T01:04:37.177 回答
1

您需要指定模板参数。例如:

template <class T> Vector<T>::Vector() { 
    items = [1000];  // note, this is also invalid syntax
    used = 0;
}
于 2013-10-11T01:01:52.330 回答
0

由于迭代器是 Vector 的嵌套类型,因此更改

template <class T> iterator Vector::begin() { return items; }

template <typename T> Vector<T>::iterator Vector<T>::begin() { return items; }

也可以对涉及迭代器的所有其他方法执行此操作。

于 2014-01-03T02:35:50.307 回答