0

配列で「[]」演算子をオーバーロードするためのプログラムを作成しています。これが私のコードです

 / / A safe array example.
    #include <iostream>
    #include <cstdlib>
    using namespace std;

    class atype {
      int a[3];
    public:
      atype(int i, int j, int k) {
        a[0] = i;
        a[1] = j;
        a[2] = k;
      }
      int &operator[](int i);
    };

    // Provide range checking for atype.
    int &atype::operator[](int i)
    {
      if(i<0 || i> 2) {
        cout << "Boundary Error\n";
        exit(1);
      }
      return a[i];
    }

    int main()
    {
      atype ob(1, 2, 3);

      cout << ob[1]; // displays 2
      cout << " ";

      ob[1] = 25; // [] appears on left
      cout << ob[1]; // displays 25

      ob[3] = 44; // generates runtime error, 3 out-of-range

      return 0;
    }

として宣言しているクラスでは

int &operator[](int i);

クラスの外では、次のように定義されています

int &atype::operator[](int i)

そうあるべきですint atype::&operator[](int i) が、エラーが発生しています。

1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): error C2589: '&' : illegal token on right side of '::'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): warning C4091: '' : ignored on left of 'int' when no variable is declared
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): error C2143: syntax error : missing ';' before '::'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): error C2059: syntax error : '::'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(18): error C2143: syntax error : missing ';' before '{'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(18): error C2447: '{' : missing function header (old-style formal list?)

しかし、試しint &atype::operator[](int i) てみるとうまくいきました。クラスまたは演算子[](int i)への参照を渡していることを誰かが説明できますか

4

2 に答える 2