Я получаю сообщение об ошибке [error: ожидаемый неквалифицированный идентификатор перед токеном ‘& '] в программе на c ++ - PullRequest
1 голос
/ 03 апреля 2011

Я получаю необычную ошибку:

ошибка: ожидаемый неквалифицированный идентификатор перед маркером ‘&’

Исходный код:

// Overloading the c++ array subscript operator [ ]

#include<iostream>
using namespace std;

const int size=10;

class myArray
{
      int a[size];
    public:
      myArray()
      {}
      int & operator [](int);
      void print_array();   
};

int myArray & operator [](int x) // This is the line where error is as by compiler
{
          return a[x];
}

void myArray::print_array()
{
    for (int j=0; j < 10; j++)
        cout<<"array["<<j<<"] = "<<a[j]<<"\n";
}

int main()
{
    myArray instance;
    for (int i=0; i < size; i++)
     {
       instance[i] = i;
     }  
    instance.print_array();

    cout<<"\n\n";
    return 0;
}

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Вы должны сообщить компилятору, что ваша функция operator [] является членом myArray:

int & myArray::operator [](const int x) 
{
          return a[x];
}

Для получения дополнительной информации, эта страница имеет достойные примеры.

0 голосов
/ 03 апреля 2011

Проблема с вашим определением operator []

int myArray & operator [](int x) // This is the line where error is as by compiler
{
          return a[x];
}

Должно быть:

int & myArray::operator [](const int x) 
{
          return a[x];
}

Кроме того, как предложение [] обычно перегружено, чтобы избежать пересеченияграницы массива.Таким образом, ваша перегрузка [] в идеале должна проверять x против size перед разыменованием массива по этому индексу.Без такой проверки вся цель перегрузки [] будет побеждена.

...