Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/86: Рейтинг темы: голосов - 86, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 24
1

Массивы в Visual Studio

20.02.2013, 22:02. Показов 16499. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Столкнулся с проблемой. Visual Studio выдает ошибки:
Кликните здесь для просмотра всего текста
e:\проекты\array test\array test\main.cpp(8): error C2057: требуется константное выражение
e:\проекты\array test\array test\main.cpp(8): error C2466: невозможно выделить память для массива постоянного нулевого размера
e:\проекты\array test\array test\main.cpp(8): error C2133: c: неизвестный размер

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    int a,i=0;
    cin >> a;
    int c[a];
    for (i=0; i<a; i++)
        cin >> c[i];
    for (i=0; i<a; i++)
        cout << c[i] << "\n";
    system("pause");
}
В CodeBlocks работает без проблем. В чем моя ошибка? И как тогда объявлять массивы в Visual Studio?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2013, 22:02
Ответы с готовыми решениями:

Динамические массивы( Visual Studio 2005 С++)
Прошу извинить меня за то что повторяюсь. Эта тема тут поднималась неоднократно. но я так и не смог...

В коде возникли ошибки при переходе с Visual studio 2013 на Visual studio 2017
Добрый день, решил попробовать поменять свою 2013 студию на 2017 и заметил такую проблему, при...

Имеются ли отличия в компиляторах у сред разработки Visual Studio 2006 и Visual Studio 2015 ?
скажите а где найти среду 2006 года? или можно использовать 2015 год?

Visual Studio Team Foundation Serverl или Visual Studio Professional
Visual Studio Team Foundation Server 2010 Кто пользовался Visual Studio Team Foundation Server...

19
328 / 327 / 92
Регистрация: 16.12.2012
Сообщений: 544
20.02.2013, 22:07 2
нужно выделить память для массива на этапе компиляции, но размер массива пока неизвестен, соответственно не понятно как выделять память. Используйте динамическую память
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    int a,i=0;
    cin >> a;
    int* c = new int[a];
    for (i=0; i<a; i++)
        cin >> c[i];
    for (i=0; i<a; i++)
        cout << c[i] << "\n";
    system("pause");
}
1
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 24
20.02.2013, 22:09  [ТС] 3
Мне не нужна динамическая память. Мне нужен статический массив.
0
328 / 327 / 92
Регистрация: 16.12.2012
Сообщений: 544
20.02.2013, 22:14 4
Цитата Сообщение от egeoksar Посмотреть сообщение
Мне не нужна динамическая память. Мне нужен статический массив.
одно другому не мешает, в С++ все массивы статические (std::vector не в счёт) в том смысле, что их размер не изменяется
1
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 24
20.02.2013, 22:15  [ТС] 5
Ладно будем пользоваться динамической памятью. Спасибо!
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
20.02.2013, 22:17 6
Цитата Сообщение от egeoksar Посмотреть сообщение
#include <iostream>
using namespace std;
int main()
{
* * int a,i=0;
* * cin >> a;
* * int c[a];
* * for (i=0; i<a; i++)
* * * * cin >> c[i];
* * for (i=0; i<a; i++)
* * * * cout << c[i] << "\n";
* * system("pause");
}
delete[] c


Цитата Сообщение от egeoksar Посмотреть сообщение
Мне не нужна динамическая память. Мне нужен статический массив.
Определяй его фиксированного максимально возможного размера,
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
20.02.2013, 23:13 7
Цитата Сообщение от egeoksar Посмотреть сообщение
В CodeBlocks работает без проблем. В чем моя ошибка? И как тогда объявлять массивы в Visual Studio?
В CodeBlocks gcc по умолчанию, а он поддерживает массивы переменной длина (Variable Length Array), которые введены в С99, а Майкрософт плевал на стандарты.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
20.02.2013, 23:18 8
Цитата Сообщение от vua72 Посмотреть сообщение
а он поддерживает массивы переменной длина (Variable Length Array), которые введены в С99,
ой, а в какой это книге написано? Просто когда я учил Си, то был уверен, что так нельзя. А сейчас действительно интересно.
Цитата Сообщение от vua72 Посмотреть сообщение
Майкрософт плевал на стандарты.
Скорее он соблюдает старую традицию.
Не суди его строго. Всё-таки Майкрософт - лучшая компания в мире!
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.02.2013, 23:20 9
C++
1
2
#include <iostream>
using namespace std;
это си или си++?
в стандарте си++ есть массивы переменной длинны?
кто наплевал на стандарты? или может кто-то не выключил какой-нибудь специальный флаг при компиляции?
0
vua72
20.02.2013, 23:24
  #10

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ой, а в какой это книге написано?
в стандарте, я сам испытал шок, когда первый раз с этим столкнулся, даже тему тут на форуме поднимал

0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
20.02.2013, 23:30 11
которые введены в С99, а Майкрософт плевал на стандарты.
Компилятор C++ не должен поддерживать стандарт C.
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
21.02.2013, 00:03 12
Цитата Сообщение от Герц Посмотреть сообщение
которые введены в С99, а Майкрософт плевал на стандарты. Компилятор C++ не должен поддерживать стандарт C.
это фича С99, где я сказал про С++? Возник вопрос, почему работает, дали ответ. В чем проблема?
http://gcc.gnu.org/onlinedocs/... Extensions. И поддерживается в gcc в качестве расширений (в т.ч.и С++), например следующий код будет работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main() {
    int n;
    cin >> n;
    int a[n];
    for (int i = 0; i < n; ++i) {
        a[i] = i * 2;
        cout << a[i] << "  ";
    }
    return 0;
}
src$ g++ test.cpp
src$ ./a.out
10
0 2 4 6 8 10 12 14 16 18
но,
src$ g++ -pedantic test.cpp test.cpp: In function ‘int main()’:
test.cpp:15:9: warning: ISO C++ forbids variable length array ‘a’ [-Wvla]
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
21.02.2013, 11:11 13
Ты видимо не заметил, что раздел по C++, а компилятор называется MS C++ compiler, а не C compiler.
0
vua72
21.02.2013, 11:59
  #14

Не по теме:

Цитата Сообщение от Герц Посмотреть сообщение
Ты видимо не заметил, что раздел по C++, а компилятор называется MS C++ compiler, а не C compiler.
ты наверно не заметил, что автор удивился, почему этот код не работает в студии, ему объяснили, что ты пытаешься доказать? я знаю чем, с отличается от с++, и то, что мс плевала на стандарты - это тоже факт, чему есть немало подтверждений.

0
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 24
21.02.2013, 20:55  [ТС] 15
А можно ли тогда в Visual Studio сменить компилятор на GCC? А то в CodeBlocks отладка тупая, а в Studio эта хрень с массивами.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
21.02.2013, 21:08 16
Цитата Сообщение от egeoksar Посмотреть сообщение
а в Studio эта хрень с массивами.
Это не хрень. В стандарте C++ нет таких массивов.
Это фишка языка C. В C++ она есть только как нестандартное дополнение GNU.
Естественно, что студия такого не поддерживает.
Используйте динамическую память. Заодно немного научитесь ею пользоваться.

Цитата Сообщение от vua72 Посмотреть сообщение
в стандарте
в стандарте C++ нет такого, а то, что GCC поддерживает такую лабуду и для программ C++ - сугубо их проблемы и ни о каком стандарте тут речи не идет.

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Скорее он соблюдает старую традицию.
Не, тут я явно с Вами не согласен. Им просто не нужен стандарт вот и всё :)

2
gray_fox
21.02.2013, 21:48
  #17

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Естественно, что студия такого не поддерживает
Ну да, С99 в MS похоже и в планах нет когда либо поддерживать // комментарии сделали, и ладно :)

0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
21.02.2013, 22:18 18
Цитата Сообщение от gray_fox Посмотреть сообщение
Ну да, С99 в MS похоже и в планах нет когда либо поддерживать // комментарии сделали, и ладно
По-моему, Croessmah, говорил о различиях между языками С и С++. Я вот не слышал о возможности выделять так массив ни в том, ни в другом языке.
Если это правда, и
Цитата Сообщение от Croessmah Посмотреть сообщение
GCC поддерживает такую лабуду и для программ C++
то Croessmah прав.
С99 это С, а не С++.
Кресты и не обязаны поддерживать С99. (Хоть я и впервые со слов Croessmah об этом услышал)
0
Croessmah
21.02.2013, 22:25
  #19

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я вот не слышал о возможности выделять так массив ни в том, ни в другом языке.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
class A{
    static int count;
public:
    A(){++count;std::cout<<"Create object.\n\tObj count: "<<count<<std::endl;}
    ~A(){--count;std::cout<<"Destroy object.\n\tObj count: "<<count<<std::endl;}
};
int A::count=0;
int main(){
    int size;
    std::cin>>size;
    A arr[size];
    return 0;
}
Массивы в Visual Studio

1
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
22.02.2013, 00:03 20

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я вот не слышал о возможности выделять так массив ни в том, ни в другом языке.
Интересно а посты других тут читают? Я выше привел пример такого выделения



Добавлено через 5 минут
Цитата Сообщение от egeoksar Посмотреть сообщение
А можно ли тогда в Visual Studio сменить компилятор на GCC? А то в CodeBlocks отладка тупая, а в Studio эта хрень с массивами.
в с++ есть std::vector, std::array (C++11) и просто динамическое выделение памяти через оператор new. Что еще нужно? Неужели на VLA свет клином сошелся? Или просто лень?
0
22.02.2013, 00:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2013, 00:03
Помогаю со студенческими работами здесь

Какую среду программирования лучше выбрать для обучения языку C++ ? Visual Studio,Visual Basic или Visual C++?
И напишите,чем рекомендуемая вами среда программирования лучше других? Насколько я понял из...

Написать программу. Задания нужно выполнять на языке Visual C++ в среде Microsoft Visual Studio 2008
Можете написать программу? Задание по номером 3.24 (2 рисунок).

Visual C++.NET и Visual Studio это одно и то же?
Доброго времени суток, давно хотел узнать но так точно и не узнал. Вопрос вот в чем: Visual...

Перевод с RAD Studio в Visual studio
Помогите пожалуйста, перевести код с одной среды разработки на другую, очень нужно. Вот код. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru