Loading...
fantom4e avatar fantom4e 24 Точки

Проблем с Visual Studio 2015.

Здравейте, имам малък проблем, когато се опитам да създам масив по този начин int array[ArrayLength]; Visual Studio 2015 ми дава това предупреждение - Еxpression must have a constant value. Не мога да разбера как да оправя проблема. 
Знам, че мога да използвам директно вектор, но искам да разбера защо не мога да използвам масив по този начин, докато под CodeBlocks нямам този проблем.

Благодаря предварително.
 

Тагове:
0
C++ Fundamentals
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки
Best Answer

Здравей,

Принципно в лекцията показах, че е възможно да правите масив, на който размерът му идва от променлива (както в твоя пример).

Това обаче е опростен вариант на истината. C++ стандартът официално не поддържа така наречените "variable length arrays (VLA)", тоест да направиш

int arrSize;
cin >> arrSize;
int arr[arrSize];

по принцип - официално - се води недефинирано поведение.

На практика обаче много компилатори го поддържат, като някои дават предупреждения, че това не следва стандартите, но не всички - това е причината във Visual Studio да ти излиза предупреждение, защото техния компилатор е различен от този, който Code::Blocks ползва.

Един често ползван вариант - поне за задачи - е да си създадеш по-голям масив, отколкото ти трябва (ако знаеш ограниченията на задачата), но да ползваш само част от него (пример 9 от лекцията).

Както ти сам казваш обаче, най-добрия вариант за нашите цели е да разчиташ на std::vector.

Поздрави,

Жоро

 

P.S.: демото, което Антония споменава има нужда от малко редакция, защото не се компилира заради повторената декларация на масива. Също обяснителните коментари малко се разминават. След малко ще го update-на 

1
fantom4e avatar fantom4e 24 Точки

Мерси за бързия и изчерпателен отговор, реших да  ползвам вектор за улеснение.

Поздрави!

0
AntoniaShalamanova avatar AntoniaShalamanova 1 Точки

Виж демото на лектора- 9та задача. Там е показано как трябва да се напише. Аз съм с Visual Studio 2017 и на мен ми дава същата грешка. Попринцип явно не може да се пише така.

0
24/11/2017 18:36:45
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.