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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2010, 18:59   #1
veter48
Форумчанин
 
Регистрация: 26.07.2010
Сообщений: 150
По умолчанию Константы

Есть класс:
Код:
class GradeBook {

public:
  const static int studenti = 10;
  const static int testi = 3;
  void showGrades();
  int setArray(int gradesArrayFromMain[studenti][testi]);
  double getAverage( int setGrades[], int tests);
  void selectData();
  void changeMark( int studentNr, int testNr, int newMark);
private:
  int gradesArray[ studenti ][ testi ];

};
Почему когда
Код:
 const static int studenti = 10;
  const static int testi = 3;
меняешь на
Код:
 int studenti = 10;
   int testi = 3;
программа не запускается.
Понадобилось эти переменные менять, а константы менять нельзя.
veter48 вне форума Ответить с цитированием
Старый 11.09.2010, 19:23   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

потому что авто переменные нельзя инициализировать в описании класса. инициализируй их в конструкторе, в списке инициализации
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.09.2010, 19:26   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

В С++ нельзя создавать "статические" массивы, указывая им переменные в качестве размерности. Или константы или же выделять память под массивы через new (читай про динамические массивы в С++).
pu4koff вне форума Ответить с цитированием
Старый 11.09.2010, 19:37   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
В С++ нельзя создавать "статические" массивы, указывая им переменные в качестве размерности. Или константы или же выделять память под массивы через new (читай про динамические массивы в С++).
да, не заметил, что он массивы через них создает.
пс. в некоторых реализациях, например gnu c++ можно) так называемые массивы переменной длины. да и с99 это разрешает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.09.2010, 19:44   #5
veter48
Форумчанин
 
Регистрация: 26.07.2010
Сообщений: 150
По умолчанию

То есть программа не может изменять размер массива?
veter48 вне форума Ответить с цитированием
Старый 11.09.2010, 19:45   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну а если нужны константы внутри класса:
Код:
class X
{
const int n = 7;   //Компилятор не разрешит
int Y[n];
};
то используем трюк с перечислениями:
Код:
class X
{
enum {n = 7};
int Y[n];
};
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.09.2010, 19:46   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2veter48 статического нет
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.09.2010, 21:24   #8
veter48
Форумчанин
 
Регистрация: 26.07.2010
Сообщений: 150
По умолчанию

Хмм пробую динамические массивы, не понимаю как сделать 2д массив.Подскажите пожалуйсто.
veter48 вне форума Ответить с цитированием
Старый 11.09.2010, 23:48   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от veter48 Посмотреть сообщение
Хмм пробую динамические массивы, не понимаю как сделать 2д массив.Подскажите пожалуйсто.
Миллион раз спрашивали. Поиск по форуму "динамический массив" или что-то в этом роде. Кто ищет, тот всегда найдёт
pu4koff вне форума Ответить с цитированием
Старый 12.09.2010, 13:04   #10
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Подсказка:
Код:
int* vec;
int** Matrix;
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Константы с U, L и F Smarti Общие вопросы C/C++ 5 01.09.2010 23:38
Константы в заголовочных файлах. jojahti Общие вопросы C/C++ 13 27.08.2009 16:03
Замена константы, переменной valerij Microsoft Office Excel 2 20.03.2008 21:16
Константы в Макросе valerij Microsoft Office Excel 2 03.02.2008 23:33
Имя константы-в строку Роман Радер Общие вопросы Delphi 2 04.07.2007 12:37