c++ замяна на размера на масива по подразбиране с аргументи на командния ред

Видях един въпрос на подобни редове Указване на масив от аргумента на командния ред

Въпреки че моят проблем е малко по-различен.

Имам множество файлове, прилагащи масиви с еднакъв размер (NOC_SIZE). Моята програма има режим по подразбиране и потребителски режим (аргументи на командния ред). Дадох 'unsigned int NOC_SIZE = 16;' ред в моя код преди началото на основната функция. В друг заглавен файл декларирах структура (noc_package) с параметър 'static unsigned int NOC_SIZE;'. Този заглавен файл е включен във всички файлове, където е необходимо.

Но във файловете, където съм декларирал масив (int arr[noc_package :: NOC_SIZE]), дава грешка, че масивът е обвързан не е цяло число.

Може ли някой да предложи начин за заобикаляне на това?

Благодаря ти.


person algoProg    schedule 23.10.2012    source източник


Отговори (1)


C++ не поддържа масиви с променлива дължина.

По-добре е да използвате std::vector вместо това:

std::vector<int> arr(noc_package::NOC_SIZE);
person Luchian Grigore    schedule 23.10.2012
comment
Вярно. Но дори след като предоставя размера по подразбиране (който трябва да бъде заменен, ако е необходимо, от аргументи на командния ред), не трябва ли да работи? - person algoProg; 23.10.2012
comment
@Gurunath не, дори не трябва да работи с размера по подразбиране, тъй като изглежда, че не е константа по време на компилиране. - person Luchian Grigore; 23.10.2012
comment
Знам, че си прав, но си помислих, че ще има някакво решение за това. Не мога да използвам вектор, тъй като масивът, който създавам, всъщност е с предварително дефинирана структура от данни (SystemC, HDL език, базиран на C++). Дори опитах unsigned int NOC_SIZE = DEFAULT; с #define DEFAULT 16, но същият резултат. - person algoProg; 23.10.2012
comment
@Gurunath същият резултат, защото това, което питате, е невъзможно. Не виждам как масивът, който искате да създадете, е предварително дефинирана структура от данни, тъй като вие просто го създавате... - person Luchian Grigore; 23.10.2012
comment
Ако командният ред, за който говорите, е командният ред на вашия изпълним файл, тогава не, просто не можете. Изпълнимият файл вече е създаден с предварително зададения размер на масива. Ако това е командният ред на компилатора, да, възможно е. Защо мислите, че не можете да използвате вектор? - person Happy Green Kid Naps; 23.10.2012
comment
Говоря за int main(int argc, char* argv[]). За използването на вектор, мисля, че трябва да се извиня и на двама ви. Ще се опитам да го реализирам. В случай на съмнение ще се върна. Благодаря. - person algoProg; 23.10.2012
comment
@Gurunath страхотно! това трябва да направиш. - person Luchian Grigore; 24.10.2012
comment
Следвайки предложението, използвах 'vector‹cdma_data› data_in_temp(noc_package::NOC_SIZE);'. Получих грешката, че грешка: „noc_package::NOC_SIZE“ не е тип. Дори опитах с число (16), грешката беше грешка: очакван идентификатор преди числова константа и грешка: очаква се ‘,’ или ‘...’ преди числова константа. какво правя грешно - person algoProg; 24.10.2012
comment
@Gurunath, ти не включваш файловете, които дефинират cdma_data и noc_package. - person Luchian Grigore; 24.10.2012
comment
Всъщност аз съм ги включил. Всъщност, когато опитам 'vector‹cdma_data› data_in_temp;', работи. И където и да използвам 'noc_package::NOC_SIZE', различно от вектор, също работи! - person algoProg; 24.10.2012
comment
@Gurunath направи ли #include <vector>? - person Luchian Grigore; 24.10.2012
comment
Разбира се, включих това. Както казах, векторната декларация за всеки размер се компилира, но с размер не! - person algoProg; 24.10.2012
comment
@Gurunath тогава проблемът е noc_package :: NOC_SIZE - какъв тип е? - person Luchian Grigore; 24.10.2012
comment
Типът е „unsigned int“. Но освен това защо не работи с 'vector‹cdma_data› data_in_temp(16);'? - person algoProg; 24.10.2012
comment
@LuchianGrigore Здравейте! Изключително съжалявам, че отговарям късно (проблем с ubuntu---12.10!!) Както и да е, направих някои експерименти с независим код и каквото казахте, проработи. Също така създадох вектор на указател към обекти, тъй като това е крайната ми цел. Там научих, че е по-добре, ако направя вектор без предварително дефиниран размер. Така че ще кодирам съответно и в случай на проблем ще дойда тук!! Благодаря ви много за вашите предложения!! - person algoProg; 26.10.2012