Я очень новичок в C++, так что это может быть довольно неприятная проблема, но у меня проблемы с поиском решения. Я искал для ответа, и у ТС есть логически эквивалентный, но таинственный рабочий код, и мы не можем понять, почему.Недопустимое использование нестатического элемента данных (массив)
Я пытаюсь объявить массив (с именем «array») в моем заголовочном файле, и я продолжаю получать некоторые нечетные ошибки. Когда я объявляю его публично как «int * array»; или "int array [];", конструктор говорит мне, что это недопустимое использование нестатического элемента данных. Когда я объявляю его закрытым, он жалуется, что элементы массива являются частными.
Отнесение сделок с перегрузкой операторов, и имеет дело с массивами с нечетными индексами, например, от -3 до 5. Ниже приведен код отношение к проблеме:
// from the .cpp file
//constructor
IntArray::IntArray(int USER_DEFINED)
{
if (USER_DEFINED < 1)
{
//return some kind of error
}
string name;
setName();
int lower = 0;
int higher = USER_DEFINED - 1;
array = new int[higher - lower];
//int* p = &array[abs(lower)];
}
//overload
int IntArray::operator[](int i)
{
if (i < lower || i > higher)
{
//return some sort of error
}
else
return array[i - lower];
}
//from the .h file
class IntArray {
public:
int* array;
int operator[](int i);
};
//from the driver
void test1() {
cout << "1. Array declared with single integer: IntArray a(10);" << endl << endl;
csis << "1. Array declared with single integer: IntArray a(10);" << endl << endl;
IntArray a(10);
for(int i = a.low(); i <= a.high(); i++)
a[i] = i * 10;
a.setName("a");
cout << a << endl;
csis << a << endl;
wait();
}`
а [I] = I * 10; где компилятор жалуется.
Заранее благодарим за любую помощь.
Эта перегрузка 'operator []' не соответствует соответствующей значению lvalue или rvalue. – chris
@chris: Мне все хорошо. Немного странно иметь оператор 'operator []' return by value, но он должен быть действительным. –
@BillyIneal, Если это значение rvalue, это должна быть функция 'const'. – chris