Здравствуйте, GarikTot, Вы писали:
GT>Здравствуйте, The_Wizzer, Вы писали:
T_W>> SettingsClass Sets[NumberOfSectionsToShow];
T_W>>Как же можно проинитить динамически?
GT>Нельзя создать на стеке массив, размер которого заранее неизвестен GT>Единственный выход, видимо, выделять память из кучи GT>Хотя я могу и ошибаться
ты не ошибаешся. Компилятор сначала выделяет память под глобальные объекты в стеке, а потом последовательно их инициализирует и в данном случае и получается неопределенная длинна. Позаносить значения переменных потом в качестве параметров можно, тут уже если я не ошибаюсь, а вот при подобного рода задании размеров извини.
Здравствуйте, Alexmoon, Вы писали:
A>Здравствуйте, GarikTot, Вы писали:
GT>>Здравствуйте, The_Wizzer, Вы писали:
int i = 0;
int f() {return ++i};
//вот такой код надеюсь нормальный компилятор пропустит и даже как мы ожидали проинициализируетint array[2] = {f(), f()};//{1,2}
//а вот такой фиг, хотя мы возможно и догадываемся о размере массиваint array1[i] = {f(), f()};//{3,4}
//вот это уже правильная его интерпритацияint array1[2] = {f(), f()};//{3,4}
надеюсь краткий смысл инициализации в подобном случае продемонстрировал
Re: Как задать размер массива объектов, через переменную?
Здравствуйте, The_Wizzer, Вы писали:
T_W>Имеется такой код:
T_W> char NumberOfSectionsToShow_buf[255]; memset (NumberOfSectionsToShow_buf,0,255);
T_W> GetPrivateProfileString("SETTINGS","NumberOfSectionsToShow","",NumberOfSectionsToShow_buf,255,".\\Panel.ini");
T_W> const int NumberOfSectionsToShow=atoi(NumberOfSectionsToShow_buf);
T_W> SettingsClass Sets[NumberOfSectionsToShow]; T_W> ^^^^^^^^^^^^^^^^^^^^^^ T_W> ЗДЕСЬ ПРОБЛЕМА!
T_W>Ругается типа, что не знаю размер для инициализации T_W> если прописываю статически, все ок.
T_W> const int NumberOfSectionsToShow=5; T_W> SettingsClass Sets[NumberOfSectionsToShow];
T_W>Как же можно проинитить динамически?
SettingsClass *Sets=new SettingsClass[NumberOfSectionsToShow];
....
работаем с ним
.....
delete[] Sets;
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
Re[2]: Как задать размер массива объектов, через переменную?
S>Здравствуйте, The_Wizzer, Вы писали:
T_W>>Имеется такой код:
T_W>> char NumberOfSectionsToShow_buf[255]; memset (NumberOfSectionsToShow_buf,0,255);
T_W>> GetPrivateProfileString("SETTINGS","NumberOfSectionsToShow","",NumberOfSectionsToShow_buf,255,".\\Panel.ini");
T_W>> const int NumberOfSectionsToShow=atoi(NumberOfSectionsToShow_buf);
T_W>> SettingsClass Sets[NumberOfSectionsToShow]; T_W>> ^^^^^^^^^^^^^^^^^^^^^^ T_W>> ЗДЕСЬ ПРОБЛЕМА!
T_W>>Ругается типа, что не знаю размер для инициализации T_W>> если прописываю статически, все ок.
T_W>> const int NumberOfSectionsToShow=5; T_W>> SettingsClass Sets[NumberOfSectionsToShow];
T_W>>Как же можно проинитить динамически?
S>
S>SettingsClass *Sets=new SettingsClass[NumberOfSectionsToShow];
S>....
S>работаем с ним
S>.....
S>delete[] Sets;
S>
Возможно и так, но при попытки переделать уже имеющийся код, я столкнулся с массой ошибок компиляции и др.
Короче выход я нашел такой:
vector <SettingsClass> SectionSettings;
SectionSettings.resize(NumberOfSectionsToShow);
и дальше просто SectionSettings[x] , где х- нужный элемент, и ВСЕ.
Проверено, в программе, которая в одном ЛистКонтроле, по выбору пользователя показывает, различные секции с иконками
все работает отлично.
Все равно спасибо...
Re[3]: Как задать размер массива объектов, через переменную?
S>>SettingsClass *Sets=new SettingsClass[NumberOfSectionsToShow];
S>>....
S>>работаем с ним
S>>.....
S>>delete[] Sets;
S>>
T_W>Возможно и так, но при попытки переделать уже имеющийся код, я столкнулся с массой ошибок компиляции и др. T_W>Короче выход я нашел такой:
T_W>vector <SettingsClass> SectionSettings;
T_W>SectionSettings.resize(NumberOfSectionsToShow);
T_W>и дальше просто SectionSettings[x] , где х- нужный элемент, и ВСЕ. T_W>Проверено, в программе, которая в одном ЛистКонтроле, по выбору пользователя показывает, различные секции с иконками T_W>все работает отлично.
Дело в том, что при конструировании вектора делается malloc, а потом при resize — realloc, что занимает приличное время. Если оптимиззация по скорости не волнует — можно и resize.
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...