Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 16:06   #1
Cookson
Пользователь
 
Регистрация: 14.04.2009
Сообщений: 16
По умолчанию Dev C++ компилирует, Visual C++ ругается

Проблема изложена в сабже: Visual C++ (версия 6.0) не компилирует то, что Dev C++ компилит без проблем.
Код:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
   int inSize;
   ifstream input("b.in");
   input >> inSize;
   int in[inSize];
И вот на строке int in[inSize]; Вижуал говорит, что, мол, "expected constant expression", "cannot allocate an array of constant size 0" и "'in' : unknown size". Что делать?
Cookson вне форума Ответить с цитированием
Старый 29.09.2009, 16:25   #2
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Такое не откомпилит и g++(Dev C++ - это IDE). Где закрывающая фигурная скобка?

А, еще, массивы переменной длины в C++ не поддерживаются, а в "новом" стандарте C - C99 - поддерживаются. Так то.

Последний раз редактировалось megachuhancer; 29.09.2009 в 16:28.
megachuhancer вне форума Ответить с цитированием
Старый 29.09.2009, 16:32   #3
Cookson
Пользователь
 
Регистрация: 14.04.2009
Сообщений: 16
По умолчанию

Да закрывающая фигурная скобка есть. Просто после этого места идёт ещё килобайт пять кода. Написал только до проблемного места.

Как же мне тогда инициализировать массив in размером inSize ?
Cookson вне форума Ответить с цитированием
Старый 29.09.2009, 16:33   #4
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Если пишешь на C++ - никак. C++ массивы переменной длины не поддерживает. Размером может быть только константа(причём такая, которую можно вычислить на этапе компиляции).

В смысле память можно выделить - динамически. С помощью malloc или new.

Последний раз редактировалось megachuhancer; 29.09.2009 в 16:37.
megachuhancer вне форума Ответить с цитированием
Старый 29.09.2009, 16:38   #5
Cookson
Пользователь
 
Регистрация: 14.04.2009
Сообщений: 16
По умолчанию

Большое спасибо. Почему же тогда компилятор в Dev C++ (который гордо называется default compiler, поэтому не могу привести названия) запросто скушал такой код?
Cookson вне форума Ответить с цитированием
Старый 29.09.2009, 16:43   #6
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

И вправду. Сейчас попробовал. Совсем я отстал от жизни... Ну, в общем, что тут непонятного? g++ вроде соответствует стандарту... Я, может, пропустил обновление. Может это нестандартная фича. Так или иначе, MS VC++ эту фичу не поддерживает, и поэтому придётся терпеть.

Почему не поддерживает, спросите в Microsoft.

Dev C++ - IDE. Компилятор там g++(и не только).

Последний раз редактировалось megachuhancer; 29.09.2009 в 16:59.
megachuhancer вне форума Ответить с цитированием
Старый 29.09.2009, 21:05   #7
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Cookson
Цитата:
Как же мне тогда инициализировать массив in размером inSize ?
Ну или как чухацер сказал.
Код:
int *n;
n = new int[inSize];
Или может как альтернатива вектор?

Последний раз редактировалось jojahti; 29.09.2009 в 21:08.
jojahti вне форума Ответить с цитированием
Старый 02.10.2009, 10:39   #8
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Напишу, может кому будет интересно. "Соответствует стандарту" на деле оказалось означает всего лишь "не противоречит стандарту". Поддержка массивов переменной длины в g++ - это расширение, по сути фича. Другие компиляторы вовсе не обязаны поддерживать её.
megachuhancer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ругается в модуле! Как быть? Golovastik Общие вопросы Delphi 21 14.07.2009 21:26
Компилятор не компилирует!((( Тимс Общие вопросы по Java, Java SE, Kotlin 10 11.06.2009 18:35
Devcpp-4.9.9.2 не компилирует. MacTiger Общие вопросы C/C++ 6 20.04.2009 22:15
Каким образом Delphi компилирует EXE? Jupiter Общие вопросы Delphi 4 26.03.2008 16:52
Ругается компилятор JSM Общие вопросы Delphi 2 17.06.2007 23:04