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

Массив в классе. Ошибка error: invalid use of non-static data member - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
18.01.2013, 19:10     Массив в классе. Ошибка error: invalid use of non-static data member #1
C++
1
2
3
4
5
6
7
class MyClass
{
    // ...
private:
    int mont; // число дней в месяце
    int days[mont];
};
Возвращает ошибку error: invalid use of non-static data member. Конечно, советуют использовать вектор. Но я прочитал у Липпмана, какую работу производит вектор при вычислении размера - а ведь если передать размер при создании объекта, можно на этом сэкономить.
Можно ли это разрулить? Или только вектор ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
18.01.2013, 19:11     Массив в классе. Ошибка error: invalid use of non-static data member #2
C++
1
2
int mont;
int * days;
А в конструкторе выделить память, например.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
18.01.2013, 19:14     Массив в классе. Ошибка error: invalid use of non-static data member #3
C++
1
2
3
4
5
6
7
class MyClass
{
    // ...
private:
    static const int mont = 30; // число дней в месяце
    int days[mont];
};
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
18.01.2013, 20:07     Массив в классе. Ошибка error: invalid use of non-static data member #4
Цитата Сообщение от Voroshek Посмотреть сообщение
о я прочитал у Липпмана, какую работу производит вектор при вычислении размера - а ведь если передать размер при создании объекта, можно на этом сэкономить.
Какую ?
C++
1
2
3
4
    size_type size() const
        {   // return length of sequence
        return (_Myfirst == 0 ? 0 : _Mylast - _Myfirst);
        }
Добавлено через 50 секунд
Цитата Сообщение от Voroshek Посмотреть сообщение
а ведь если передать размер при создании объекта,
Устанавливайте размер вектора сразу... что мешает ?

Добавлено через 3 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
static const int mont = 30; // число дней в месяце
А если 31 или 28 ?

Добавлено через 6 минут

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MyClass
{
    // ...
private:
    int mont; // число дней в месяце
    int days[31]; // по максимуму 
 
   MyClass(int _mont=31):mont(_mont){}
 
   void some_mehod()
     {
        for(int i=0; i<mont; i++) {  /*  do  something with days[i] */ };
     }
};
//------
MyClass M(28); // Февраль
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
18.01.2013, 20:27     Массив в классе. Ошибка error: invalid use of non-static data member #5
А если 31 или 28 ?
То логичнее использовать динамическое выделение памяти
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
18.01.2013, 20:31     Массив в классе. Ошибка error: invalid use of non-static data member #6
MrGluck, Мудохаться из-за нескольких int-тов ? Явно что больше 31 не будет...
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
18.01.2013, 20:58  [ТС]     Массив в классе. Ошибка error: invalid use of non-static data member #7
Цитата Сообщение от Avazart Посмотреть сообщение
MrGluck, Мудохаться из-за нескольких int-тов ?
Не, ну как... там байт, сям байт... глядишь: 50 Мб плавно превращаются в 200
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
18.01.2013, 21:09     Массив в классе. Ошибка error: invalid use of non-static data member #8
Ну это если у вас ~200 месяцев в году при чем все по 30 дней и то не выйдет....
Цитата Сообщение от Voroshek Посмотреть сообщение
там байт, сям байт... глядишь:
А глядишь и перераспределение ? - то же не дешевое удовольствие...
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
18.01.2013, 21:37  [ТС]     Массив в классе. Ошибка error: invalid use of non-static data member #9
Цитата Сообщение от Schizorb Посмотреть сообщение
А в конструкторе выделить память, например.
Вот над этим вариантом надо будет подумать
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
18.01.2013, 23:00     Массив в классе. Ошибка error: invalid use of non-static data member #10
Voroshek, нужен вариант с дин. памятью?

Добавлено через 4 минуты
Avazart, если класс будет иметь кучу потомков и объектов, то критично, ТС правильно подметил. Ваш вариант подходит (лучше еще сделать const int mont) в рамках лабы. Все зависит от того, что требуется.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
18.01.2013, 23:02     Массив в классе. Ошибка error: invalid use of non-static data member #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, если класс будет иметь кучу потомков и объектов, то критично, ТС правильно подметил. Ваш вариант подходит (лучше еще сделать const int mont) в рамках лабы. Все зависит от того, что требуется.
Для его месяцу потомки ?
А вот что если февраль решите сделать январем, а потом июнем итд.. в динамике - делать каждый раз перераспределение куда дороже в плане скорости...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
18.01.2013, 23:22     Массив в классе. Ошибка error: invalid use of non-static data member #12
Avazart, февраль сделать январем? С трудом представляю необходимость в подобной ситуации, да и с точки зрения объектов это неверно. Всегда надо учиться смотреть вперед а не писать "абы сдать".
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
18.01.2013, 23:29     Массив в классе. Ошибка error: invalid use of non-static data member #13
C++
1
2
3
4
MyClass A(28),B(31);
//...
A = B;
//..
Добавлено через 41 секунду
Цитата Сообщение от MrGluck Посмотреть сообщение
да и с точки зрения объектов это неверно.
А что тут неверно обычное присвоение...
при const будет невозможным при дин.массиве вызовет перераспределение...

Добавлено через 2 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Всегда надо учиться смотреть вперед а не писать "абы сдать".
Вот и смотрите ...
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.01.2013, 23:34     Массив в классе. Ошибка error: invalid use of non-static data member #14
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, февраль сделать январем? С трудом представляю необходимость в подобной ситуации, да и с точки зрения объектов это неверно. Всегда надо учиться смотреть вперед а не писать "абы сдать".
с трудом представляю необходимость наследовать от месяца нечто, что будет записывать в него 100500 дней
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
18.01.2013, 23:42     Массив в классе. Ошибка error: invalid use of non-static data member #15
Avazart, я бы добавил в приват operator= и все. Еще раз говорю,
Цитата Сообщение от MrGluck Посмотреть сообщение
Все зависит от того, что требуется.
Добавлено через 4 минуты
Kuzia domovenok, спокойно:
Летний месяц, зимний месяц. Никто не говорит о 100500 днях в месяце, более того, количество - константа (думаю, что Avazart согласен, что её использование в его примере желательно). В производных классах спокойно можно конкретизировать за счет других параметров.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
19.01.2013, 01:24     Массив в классе. Ошибка error: invalid use of non-static data member #16
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, я бы добавил в приват operator= и все. Еще раз говорю,
И что дальше ? Создаем класс что бы потом им неудобно было дальше пользоваться ?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
19.01.2013, 01:28     Массив в классе. Ошибка error: invalid use of non-static data member #17
Avazart, я для себя и не ставил целью сделать класс, элементы которого будут присваиваться друг дружке, иногда такая способность и не нужна.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
19.01.2013, 02:26     Массив в классе. Ошибка error: invalid use of non-static data member #18
Ну да городить огороды это нормально...

Цитата Сообщение от MrGluck Посмотреть сообщение
не ставил целью сделать класс,
Впечатление что цели просто не было... была непродуманность...

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
иногда такая способность и не нужна.
Сказать точнее такая особенность не нужна очень редко...
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.01.2013, 02:30     Массив в классе. Ошибка error: invalid use of non-static data member #19
Цитата Сообщение от Avazart Посмотреть сообщение
Сказать точнее такая особенность не нужна очень редко...
ничего себе редко!! А для чего вообще создаются объекты классов? Чтоб сидеть на месте и друг у друга методы вызывать что ли? На первом месте в ООП - хранение данных в полях объектов класса. Т.е. классы - просто удобный способ хранить несколько полей вместе. Методы - второстепенны! Структуры наше всё! Попробуйте все доказать обратное
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 02:33     Массив в классе. Ошибка error: invalid use of non-static data member
Еще ссылки по теме:

'operator =' must be a non-static member C++
C++ Ошибка компиляции "forbids in-class initialization of non-const static member"
Ошибка при сборке проекта - invalid use of non-static data member 'MainWindow::test' C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,573
Записей в блоге: 17
19.01.2013, 02:33     Массив в классе. Ошибка error: invalid use of non-static data member #20
Попробуйте найти в данной теме хотя бы намек на необходимость noncopyable типа ?

Таким классом-издевательством никто не будет пользоваться...

Как возвратить значение из ф-ции ? Как быть с временными переменными?
Как хранить такие типы в векторе? итд итп...
Yandex
Объявления
19.01.2013, 02:33     Массив в классе. Ошибка error: invalid use of non-static data member
Ответ Создать тему
Опции темы

Текущее время: 14:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru