创建我自己的向量类,很多错误

Creating my own vector Class, a lot of errors

本文关键字:错误 我自己 自己的 向量 创建      更新时间:2023-10-16

我对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: 错误:在没有模板参数的情况下使用"模板类 Vector"main.cpp:67:错误:ISO C++禁止声明没有类型的"矢量"main.cpp:67: 错误:模板 'template int Vector((' 的声明main.cpp:52:错误:与以前的声明"模板类 Vector"冲突main.cpp:52:错误:以前的非函数声明"模板类 Vector"main.cpp:67: 错误:与函数声明"template int Vector(("冲突main.cpp: 在函数 'int Vector((' 中:主.cpp:68:错误:"项目"未声明(首次使用此函数(main.cpp:68:错误:(每个未声明的标识符只针对它出现的每个函数报告一次。main.cpp:68:错误:"["标记之前的预期主表达式主.cpp:69:错误:"已使用"未声明(首次使用此函数(主.cpp: 在全球范围内:main.cpp:72:错误:"Vector"之前的预期构造函数、析构函数或类型转换main.cpp:72:错误:在"矢量"之前应为";"main.cpp:76:错误:"Vector"之前的预期构造函数、析构函数或类型转换main.cpp:76:错误:在"矢量"之前预期";"main.cpp:80:错误:"模板类 Vector"在没有模板参数的情况下使用main.cpp: 在函数 'int size((' 中:main.cpp:81:错误:"已使用"未声明(首次使用此函数(主.cpp: 在全球范围内:main.cpp:84:错误:"Vector"之前的预期构造函数、析构函数或类型转换main.cpp:84:错误:在"矢量"之前预期";"main.cpp:94:错误:在没有模板参数的情况下使用"模板类 Vector"main.cpp: 在函数 'void alloc_new((' 中:main.cpp:95:错误:"项目"未声明(首次使用此函数(main.cpp:95:错误:"已使用"未声明(首次使用此函数(

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

template <class T> Vector<T>::Vector() { 
    items = [1000];  // note, this is also invalid syntax
    used = 0;
}
  1. Vector::vector()需要更改为 Vector<T>::vector() .以下成员函数也是如此。
  2. iterator前面需要加上Vector<T>作为Vector<T>::iterator,因为iterator是在类Vector中声明

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

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

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

使用涉及迭代器的所有其他方法也执行此操作。