类中的重载运算符 [],因此它可以从模板类中的数组返回对象

Overloading operator [] in class, so it can return object from array that is in template class

本文关键字:数组 对象 返回 运算符 重载      更新时间:2023-10-16
template <class T> 
class Planer{
    T array;
    int max_stavki;
    int broj_stavki;
    public:
        Planer()
       {
            max_stavki = 100;
            array = new T[max_stavki];
            broj_stavki = 0;
        }
        ~Planer()
        {
            delete[] array;
        }
        void add(T& x){
            if (broj_stavki==max_stavki){
                throw NO_SPACE();
            }
            else{
                array[broj_stavki] = x;        // here i get error
                broj_stavki++;
            }
        }
    };

在模板类中,我需要创建此类的对象数组。

class Ispit{
        char* naziv;
        int sifra = -0001;
        char* datum;
        int vreme;
};

但是当我想从模板类使用函数添加时,会弹出此错误:

错误 C2676 二进制"[":"Ispit"未定义此运算符或转换为预定义运算符可接受的类型

我在模板类中尝试了这样的事情。但错误仍然存在。

Planer<T>& operator [] (int x){
    return array[x];
};

我想我也需要在 Ispit 类中重载运算符 [],但我不知道怎么做。

谢谢前面的伙计们!

Planer<Ispit>array成员属于Ispit类型,实际上不是一个数组。你打算让array类型是什么?潜在:

template <class T> 
class Planer
{
    T* array; // NOTE THAT I MADE THIS A POINTER
    int max_stavki;
    int broj_stavki;
public:
    Planer() {
        array = nullptr;
        broj_stavki = 0;
        max_stavki = 0;
    }
    ~Planer() {
        clear();
        delete[] array;
    }
    Planer(Planer&& other) noexcept {
        array = other.array;
        broj_stavki = other.broj_stavki;
        max_stavki = other.max_stavki;
        other.array = nullptr;
        other.broj_stavki = 0;
        other.broj_stavki = 0;
    }
    Planer& operator=(Planer&& other) noexcept {
        std::swap(array, other.array);
        std::swap(array, other.broj_stavki);
        std::swap(array, other.max_stavki);
        other.clear();
    }
};