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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
#1

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

18.01.2013, 19:10. Просмотров 3398. Ответов 19
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
class MyClass
{
    // ...
private:
    int mont; // число дней в месяце
    int days[mont];
};
Возвращает ошибку error: invalid use of non-static data member. Конечно, советуют использовать вектор. Но я прочитал у Липпмана, какую работу производит вектор при вычислении размера - а ведь если передать размер при создании объекта, можно на этом сэкономить.
Можно ли это разрулить? Или только вектор ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 19:10     Массив в классе. Ошибка error: invalid use of non-static data member
Посмотрите здесь:

C++ vc++2008 ошибка cmath(21) : error C2039: 'acosf' : is not a member of '`global namespace''
C++ Ошибка в MAPI: fatal error LNK1136: invalid or corrupt file
C++ Ошибка в коде программы. conversion from 'double' to 'int', possible loss of data, error C2018: unknown charact
C++ map assigment of read only data member или WTF?
C++ Ошибка invalid use of member
C++ ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken
Массив в структуре. invalid use of non-static data member C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ворчун
Эксперт CЭксперт С++
6634 / 3825 / 502
Регистрация: 29.11.2010
Сообщений: 10,111
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
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 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
Ворчун
Эксперт CЭксперт С++
6634 / 3825 / 502
Регистрация: 29.11.2010
Сообщений: 10,111
18.01.2013, 20:27     Массив в классе. Ошибка error: invalid use of non-static data member #5
А если 31 или 28 ?
То логичнее использовать динамическое выделение памяти
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 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
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 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
Ворчун
Эксперт CЭксперт С++
6634 / 3825 / 502
Регистрация: 29.11.2010
Сообщений: 10,111
18.01.2013, 23:00     Массив в классе. Ошибка error: invalid use of non-static data member #10
Voroshek, нужен вариант с дин. памятью?

Добавлено через 4 минуты
Avazart, если класс будет иметь кучу потомков и объектов, то критично, ТС правильно подметил. Ваш вариант подходит (лучше еще сделать const int mont) в рамках лабы. Все зависит от того, что требуется.
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 17
18.01.2013, 23:02     Массив в классе. Ошибка error: invalid use of non-static data member #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, если класс будет иметь кучу потомков и объектов, то критично, ТС правильно подметил. Ваш вариант подходит (лучше еще сделать const int mont) в рамках лабы. Все зависит от того, что требуется.
Для его месяцу потомки ?
А вот что если февраль решите сделать январем, а потом июнем итд.. в динамике - делать каждый раз перераспределение куда дороже в плане скорости...
MrGluck
Ворчун
Эксперт CЭксперт С++
6634 / 3825 / 502
Регистрация: 29.11.2010
Сообщений: 10,111
18.01.2013, 23:22     Массив в классе. Ошибка error: invalid use of non-static data member #12
Avazart, февраль сделать январем? С трудом представляю необходимость в подобной ситуации, да и с точки зрения объектов это неверно. Всегда надо учиться смотреть вперед а не писать "абы сдать".
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 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
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
18.01.2013, 23:34     Массив в классе. Ошибка error: invalid use of non-static data member #14
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, февраль сделать январем? С трудом представляю необходимость в подобной ситуации, да и с точки зрения объектов это неверно. Всегда надо учиться смотреть вперед а не писать "абы сдать".
с трудом представляю необходимость наследовать от месяца нечто, что будет записывать в него 100500 дней
MrGluck
Ворчун
Эксперт CЭксперт С++
6634 / 3825 / 502
Регистрация: 29.11.2010
Сообщений: 10,111
18.01.2013, 23:42     Массив в классе. Ошибка error: invalid use of non-static data member #15
Avazart, я бы добавил в приват operator= и все. Еще раз говорю,
Цитата Сообщение от MrGluck Посмотреть сообщение
Все зависит от того, что требуется.
Добавлено через 4 минуты
Kuzia domovenok, спокойно:
Летний месяц, зимний месяц. Никто не говорит о 100500 днях в месяце, более того, количество - константа (думаю, что Avazart согласен, что её использование в его примере желательно). В производных классах спокойно можно конкретизировать за счет других параметров.
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 17
19.01.2013, 01:24     Массив в классе. Ошибка error: invalid use of non-static data member #16
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, я бы добавил в приват operator= и все. Еще раз говорю,
И что дальше ? Создаем класс что бы потом им неудобно было дальше пользоваться ?
MrGluck
Ворчун
Эксперт CЭксперт С++
6634 / 3825 / 502
Регистрация: 29.11.2010
Сообщений: 10,111
19.01.2013, 01:28     Массив в классе. Ошибка error: invalid use of non-static data member #17
Avazart, я для себя и не ставил целью сделать класс, элементы которого будут присваиваться друг дружке, иногда такая способность и не нужна.
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 17
19.01.2013, 02:26     Массив в классе. Ошибка error: invalid use of non-static data member #18
Ну да городить огороды это нормально...

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

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
иногда такая способность и не нужна.
Сказать точнее такая особенность не нужна очень редко...
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 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++
C++ Ошибка error: invalid types 'int[int]' for array subscript
C++ Ошибка "non-static data member initializers only available with -std=c++11 or -std=gnu++11"

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

Или воспользуйтесь поиском по форуму:
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,049
Записей в блоге: 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
Ответ Создать тему
Опции темы

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