Форум программистов, компьютерный форум CyberForum.ru

Ошибка "Constant expression is required" - const в сlass - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка матрицы http://www.cyberforum.ru/cpp-beginners/thread406313.html
Элементы главной диагонали квадратной матрицы расположить в порядке убывания.
C++ сортировка Помоги доделать программу , сортировать слова по алфавиту , радиксным(распределяющим) методом string radix(string str, int max, int k){ string s1; int i,e,v,q=0; e=0; string s2=""; if(k==1) { http://www.cyberforum.ru/cpp-beginners/thread406312.html
Рекурсивная функция, не возвращающая значение C++
Разработать рекурсивную функцию для вывода на экран картинки (при натуральном число n): 1 222 33333 ... 33333 222 1 (примечание - первая строчка - 1 раз, вторая - 3 раза, 3-я - 5 раз, ... - n раз и т.д.)
C++ Удалить из массива последний отрицательный элемент.
Добрый день! Помогите с решением задачи. ------------------------------------------------------------------------------------------------------ Условие: Удалить из массива последний отрицательный элемент. Если такого нет, циклически сдвинуть все элементы на X вправо. ------------------------------------------------------------------------------------------------------ Заранее спасибо!
C++ Массивы(задачи) http://www.cyberforum.ru/cpp-beginners/thread406233.html
Начал изучать язык Си.Не могу решить задачи.Прошу помощи в решении: 1.Дано 2(два) массива из цифр: а)найти сумму б)разность в)произведение 2.Перевести число из десятичной системы в двоичную. 3.Перевести число из двоичной в десятичную. P.S.:Только начал изучать язык.Готов выслушать советы по изучению(литература,решебники и т.п.)
C++ Строки с Файлом(в стр без файла) как сделать так чтобы прога читала строки не из файла,а чтобы вводить их самому!?)(БЕЗ ФАЙЛОВ) #include <stdio.h> #include <fstream.h> #include <conio.h> int main() { ifstream fin("test.txt", ios:: in || ios:: nocreate); if(!fin) { подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
14.12.2011, 13:02     Ошибка "Constant expression is required" - const в сlass
Цитата Сообщение от Андрей2011 Посмотреть сообщение
Но точно ли ывделяется динамическая память? там же нет new!
А Вы внутри классов vector и allocator уже посмотрели?

Цитата Сообщение от Андрей2011 Посмотреть сообщение
а т.к. я раньше подобного не делал то не знаю на сколько мой код вообще правильный и чем может грозить мне создание массива без ограничения длинны.
Честно говоря, я точно не знаю, что происходит здесь
Но предполагаю, что массив создается, как бы сказать, нулевой длины. То есть sizeof вернет 0. Следовательно писать и читать из этого массива нельзя вообще. В любом случае будет выход за границы массива. Фактически при обращении к такому массиву происходит преобразование в указатель, а потом уже с этим указателем можно делать что угодно.

Не знаю зачем компилятор позволяет такое делать. Например, вне класса, - это явная ошибка компиляции. Я бы еще понял, если бы это был static, тогда можно было бы писать следующим образом:
C++
1
2
3
4
5
struct Array {
        static char arr[];
};
 
char Array::arr[5];
А в данном случае не понимаю
Единственное что могу сказать, лучше так не делать, а использовать STL vector.

Беглый поиск по стандарту ответа не дал. Но сами логически подумайте, как может быть массив безрамерным?

Добавлено через 1 час 58 минут
Цитата Сообщение от Андрей2011 Посмотреть сообщение
чем может грозить мне создание массива без ограничения длинны.
Набросал примерчик, демонстрирующий чем же именно может грозить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
struct Bad {
   int a[];
   int b;
};
 
int main() {
   Bad bad;
   
   // Записываем в "b" некоторое значение
   bad.b = 5;
   std::cout << bad.b << std::endl;
   
   // Записываем в "a[0]" некоторое значение
   bad.a[0] = 10;
   std::cout << bad.a[0] << std::endl;
   
   // А теперь посмотрим, что находится в "b"
   std::cout << bad.b << std::endl;
   return 0;
}
У меня получается вот такой результат:
Код
5
10
10
 
Текущее время: 05:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru