2017-02-10 4 views
0
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でも演算子[]をオーバーロードする必要があると思いますが、どうすればよいか分かりません。

よろしくお願いします。

+3

「niz」とは何ですか?あなたは[最小限の、完全で、証明可能な例](http://stackoverflow.com/help/mcve)を作成して私たちを見せてください。 –

+0

申し訳ありませんが悪いです。ニズは私の言葉ではなく配列です。私はそれを忘れてしまった。 – user3579284

答えて

1

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(); 
    } 
}; 
+0

デフォルトのコンストラクタをコピーするのを忘れてしまいました。 – user3579284

関連する問題