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

时间:2017-02-10 21:31:21

标签: c++ arrays templates operator-overloading

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;
};

但是当我想使用模板类中的函数add时会弹出这个错误:

  

错误C2676二进制&#39; [&#39;:&#39; Ispit&#39;没有定义此运算符或转换为预定义运算符可接受的类型

我在模板类中尝试过类似的东西。但错误仍然存​​在。

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

我想我也需要在Ispit课程中重载operator [],但我不知道如何。

谢谢你们在前面!

1 个答案:

答案 0 :(得分:1)

Planer<Ispit>&#39; 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();
    }
};