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

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

Войти
Регистрация
Восстановить пароль
 
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! - C++

25.08.2013, 00:04. Просмотров 884. Ответов 18
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CCoords
{
static const float rate = 1.0f; // ОШИБКА !!!
 
      bool        IsComputed;
      float       x,y;
      POINT2D     mouse_down,mouse_pressed;
      D3DXMATRIX  world;
      D3DXVECTOR3 origin;
      D3DXVECTOR3 right,up,dir;
 
public:
                    CCoords();
      void          SetMouseDown(const POINT2D * point);
      void          SetMouse(const POINT2D *  point);
      void          SetMouseUp();
      D3DXMATRIX*   GetMatrixWorld();
private:
      void          ComputeWorldMatrix();
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 00:04     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса !
Посмотрите здесь:

Мое константное статическое поле только что было использовано до того как оно создалось? - C++
В названии темы уже понятно, думаю, что у меня за проблема. Я экспериментировал со статическими полями классов (в частности с...

Константное поле класса как размер массива - C++
class Array { private: const int size; int array; public: Array(): size(10) { }

Как инициализровать константное поле класса в конструкторе? - C++
Здравствуйте. Такая проблема. Класс работает с множеством картинок одинакового разрешения. Размеры картинки должны храниться в полях...

Статическое поле класса, имеющее тип того же класса - C++
Всем доброго времени суток. Как известно, поля класса могут быть ссылками, либо указателями на тот же класс, в котором объявляются, но не...

Статическое поле,количество экземпляров класса - C++
Помогите понять,статическое поле stcount считает количество созданных экземпляров класса (объектов),я объявляю всего два объекта а он...

Почему метод класса затирает статическое поле - C++
Добрый день :) Я учу самостоятельна с++. Сейчас разбираю тему классы. Вот у меня возник вопрос по коду: #include<iostream> using...

Статическое поле - C++
Помогите с такой проблемой. Программа нормально компилится, но возвращается, вот такая ошибка при объявлении статического поля,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
25.08.2013, 00:07     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #2
Цитата Сообщение от vbloodv Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CCoords
{
static const float rate = 1.0f; // ОШИБКА !!!
 
      bool        IsComputed;
      float       x,y;
      POINT2D     mouse_down,mouse_pressed;
      D3DXMATRIX  world;
      D3DXVECTOR3 origin;
      D3DXVECTOR3 right,up,dir;
 
public:
                    CCoords();
      void          SetMouseDown(const POINT2D * point);
      void          SetMouse(const POINT2D *  point);
      void          SetMouseUp();
      D3DXMATRIX*   GetMatrixWorld();
private:
      void          ComputeWorldMatrix();
};
Инициализация должна быть внекласса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CCoords
{
static const float rate; // ОШИБКА !!!
 
      bool        IsComputed;
      float       x,y;
      POINT2D     mouse_down,mouse_pressed;
      D3DXMATRIX  world;
      D3DXVECTOR3 origin;
      D3DXVECTOR3 right,up,dir;
 
public:
                    CCoords();
      void          SetMouseDown(const POINT2D * point);
      void          SetMouse(const POINT2D *  point);
      void          SetMouseUp();
      D3DXMATRIX*   GetMatrixWorld();
private:
      void          ComputeWorldMatrix();
};
static const float CCoords::rate = 1.0f;
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
25.08.2013, 00:09  [ТС]     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #3
Цитата Сообщение от Hugra Посмотреть сообщение
static const float CCoords::rate = 1.0f;
Пишет тогда "Переопределение"
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 00:10     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #4
C++
1
2
3
4
5
6
class CCoords {
    static const float rate;
public:
};
 
const float CCoords::rate = 1.f;
Модификатор static вне класса не надо указывать.
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
25.08.2013, 00:11  [ТС]     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #5
Цитата Сообщение от castaway Посмотреть сообщение
const float CCoords::rate = 1.f;
Верно, в определение слово статик надо было убрать )))
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
25.08.2013, 00:12     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #6
Цитата Сообщение от castaway Посмотреть сообщение
C++
1
2
3
4
5
6
class CCoords {
    static const float rate;
public:
};
 
const float CCoords::rate = 1.f;
Модификатор static вне класса не надо указывать.

Цитата Сообщение от vbloodv Посмотреть сообщение
Пишет тогда "Переопределение"
static забыл убрать.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 01:45     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #7
Статическое константное поле? Серьёзно?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 01:46     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #8
Цитата Сообщение от Nekto Посмотреть сообщение
Серьёзно?
Серьезно. А что?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 02:00     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #9
Цитата Сообщение от castaway Посмотреть сообщение
Серьезно. А что?
Зачем? Я не говорю про сферического коня в вакууме, просто интересна реальная причина использования статического константного флоута в данном классе.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 02:06     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #10
Я не пойму, что именно тебе не понятно? Для тебя термины статический и константный не совместимы?
Статический член класса - это такой член, который для всех экземпляров класса один.
Константный - не изменяемый.
Что в этом такого?

Не по теме:

РМЭС читал?

gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.08.2013, 02:11     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #11
Цитата Сообщение от Hugra Посмотреть сообщение
Инициализация должна быть внекласса.
Можно и внутри класса.
C++
1
2
3
4
class CCoords
{
static constexpr float rate = 1.0f;
} obj;
Bash
1
-std=c++11
Добавлено через 4 минуты
Можно и так:

C++
1
2
3
4
class CCoords
{
static const float rate = 1.0f;
} obj;
Bash
1
-std=c++98
TC, не понимаю, что у вас за ошибки-то?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 02:49     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #12
Цитата Сообщение от gromo Посмотреть сообщение
TC, не понимаю, что у вас за ошибки-то?
Студия такое не компилирует.
http://stackoverflow.com/questions/2...e-static-const
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 02:53     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #13
Цитата Сообщение от gromo Посмотреть сообщение
Можно и внутри класса.
От компилятора зависит.

Добавлено через 2 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Я не пойму, что именно тебе не понятно? Для тебя термины статический и константный не совместимы?
Статический член класса - это такой член, который для всех экземпляров класса один.
Константный - не изменяемый.
Что в этом такого?
Т.е. изменений в процессе работы не предвидится. Почему не просто константный, а значение в конструкторе задавать.
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
28.08.2013, 15:29  [ТС]     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #14
Цитата Сообщение от Nekto Посмотреть сообщение
Зачем? Я не говорю про сферического коня в вакууме, просто интересна реальная причина использования статического константного флоута в данном классе.
Константные переменные которые не стоит размещать в глобальном пространстве имен, а запихнуть в класс и сделать статическими, чтобы не увеличивать объем класса...

Добавлено через 2 минуты
Цитата Сообщение от Nekto Посмотреть сообщение
От компилятора зависит.
Студия это само по себе UB

Добавлено через 4 минуты
Цитата Сообщение от Nekto Посмотреть сообщение
Т.е. изменений в процессе работы не предвидится. Почему не просто константный, а значение в конструкторе задавать.
Потому что тогда при создании каждого нового объекта при const int ss = 88; объем используемого места будет увеличиваться на 4 (sizeof(ss)), а если переменная статическая, то только один раз
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
28.08.2013, 15:39     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Студия такое не компилирует.
Щито?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
class MyClass
{
public:
    static const int x = 5;
};
 
int main()
{
    MyClass x;
    return 0;
}
Студия 2012 - все компилится и работает.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 15:43     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #16
Цитата Сообщение от vbloodv Посмотреть сообщение
Студия это само по себе UB
А стандарт?
§9.4.2/4
If a static data member is of const integral or const enumeration type, its declaration in the class
definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that
case, the member can appear in integral constant expressions. The member shall still be defined in a namespace
scope if it is used in the program and the namespace scope definition shall not contain an initializer.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
28.08.2013, 15:45     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #17
Dani, с int'ом ясное дело скомпилит float поставьте
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 15:46     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #18
Цитата Сообщение от Dani Посмотреть сообщение
Щито?
Где, в обсуждаемом примере, переменная типа int? int можно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 17:18     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса !
Еще ссылки по теме:

Создать класс. Символьное поле должно быть задано как объект класса string - C++
решите задачку!) 6. Создать класс. Символьное поле должно быть задано как объект класса string. Написать конструктор по умолчанию,...

Когда оператор должен быть обязательно членом класса, и когда он обязательно не принадлежит классу? - C++
Нужно узнать случаи, когда оператор функция должна быть обязательно членом класса и случаи, когда оператор- функция обязательно не...

Определить, может ли белая фигура пойти на поле - C++
Пожалуйста помогите, очень презнателен... 1. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не...

Изменить поле класса - C++
код большой и использует доп. библиотеки - постараюсь описать схематично(надеюсь будет понятно) есть класс А, есть класс B : А...

Указатель на поле класса - C++
Доброго дня суток. Есть класс DataOfGroup, список экземпляров этого класса lst, begin() - итератор, установленный на начало списка lst,...


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

Или воспользуйтесь поиском по форуму:
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
28.08.2013, 17:18  [ТС]     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! #19
Цитата Сообщение от Croessmah Посмотреть сообщение
Dani, с int'ом ясное дело скомпилит float поставьте
C++
1
const float CCoords::RATE = 2.5f; // Да, верно оно у меня изначально с float'ом было !
Yandex
Объявления
28.08.2013, 17:18     Только константное статическое поле НЕ МОЖЕТ быть поле членом класса !
Ответ Создать тему
Опции темы

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