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

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

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

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

25.08.2013, 00:04. Просмотров 911. Ответов 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();
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 00:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! (C++):

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

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

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

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

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

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

18
Hugra
48 / 48 / 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;
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
25.08.2013, 00:09  [ТС] #3
Цитата Сообщение от Hugra Посмотреть сообщение
static const float CCoords::rate = 1.0f;
Пишет тогда "Переопределение"
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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 вне класса не надо указывать.
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
25.08.2013, 00:11  [ТС] #5
Цитата Сообщение от castaway Посмотреть сообщение
const float CCoords::rate = 1.f;
Верно, в определение слово статик надо было убрать )))
0
Hugra
48 / 48 / 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 забыл убрать.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 01:45 #7
Статическое константное поле? Серьёзно?
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 01:46 #8
Цитата Сообщение от Nekto Посмотреть сообщение
Серьёзно?
Серьезно. А что?
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 02:00 #9
Цитата Сообщение от castaway Посмотреть сообщение
Серьезно. А что?
Зачем? Я не говорю про сферического коня в вакууме, просто интересна реальная причина использования статического константного флоута в данном классе.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 02:06 #10
Я не пойму, что именно тебе не понятно? Для тебя термины статический и константный не совместимы?
Статический член класса - это такой член, который для всех экземпляров класса один.
Константный - не изменяемый.
Что в этом такого?

Не по теме:

РМЭС читал?

0
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, не понимаю, что у вас за ошибки-то?
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 02:49 #12
Цитата Сообщение от gromo Посмотреть сообщение
TC, не понимаю, что у вас за ошибки-то?
Студия такое не компилирует.
http://stackoverflow.com/questions/2...e-static-const
1
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 02:53 #13
Цитата Сообщение от gromo Посмотреть сообщение
Можно и внутри класса.
От компилятора зависит.

Добавлено через 2 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Я не пойму, что именно тебе не понятно? Для тебя термины статический и константный не совместимы?
Статический член класса - это такой член, который для всех экземпляров класса один.
Константный - не изменяемый.
Что в этом такого?
Т.е. изменений в процессе работы не предвидится. Почему не просто константный, а значение в конструкторе задавать.
1
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)), а если переменная статическая, то только один раз
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 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 - все компилится и работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 15:39
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
28.08.2013, 15:39
Ответ Создать тему
Опции темы

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