У меня есть класс, и я собираюсь объявить размер массива (двумерный) на основе ввода от пользователя. так:Объявление массива объектов в куче с переменным размером массива
class myClass {/*...*/}
int main(){
myClass* arrayObj = new myClass[100][100];
Это прекрасно работает, и он должен поместить массив в куче. Но мне нужно сделать:
int arraySize;
cin >> arraySize;
myClass* arrayObj = new myClass[arraySize][arraySize];
Я получаю сообщение об ошибке: «ARRAYSIZE» не может появиться в постоянной экспрессии.
Я предполагаю, что это означает, что я могу иметь только константы в объявлении массива, но если нет, то как я могу это сделать? Массив слишком большой, чтобы поместиться в стеке, поэтому я делаю это в куче в первую очередь.
Редактировать: У меня есть работа с указателями, но у меня другая проблема, у меня есть функция, которая использует массив, т.е.
void myFunction()
{
/*...*/
arrayObj[something][something].variable = somethingElse // error here
}
int main()
{
/*...*/
int arraySize;
cin >> arraySize;
MyClass **arrayObj = new MyClass*[arraySize]
for (int i = 0; i < arraySize; i++) arrayObj[i] = new MyClass[arraySize]
/*...*/
}
Я получаю: ошибка: «arrayObj» не был объявлен в этой области. Я могу понять, почему, но это на куче, и это указатель, разве это не глобально? Если нет, как бы я сделал это глобальным?
Это очень важно: http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c – supertopi
Вы должны взглянуть на ['std :: vector'] (http: // en .cppreference.com/w/cpp/container/vector) –
«Это прекрасно работает ...» - нет, это не так. Ваш компилятор ужасно мягкий. Вы присваиваете 'myClass (*) [100]' указателю типа 'myClass *'. Это не тот же тип, и повышенный уровень предупреждения от вашего компилятора, скорее всего, скажет вам об этом (и не с ошибкой, если предупреждения настроены на сбой, но он должен * быть ошибкой независимо, и я бы подумал об утилизации вашей инструментальной цепочки если это не так). Это должно также рассказать вам о том, почему ваш второй фрагмент также потерпит неудачу. – WhozCraig