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

Linker error с приватным статическим членом класса - C++

Восстановить пароль Регистрация
 
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
14.10.2013, 18:57     Linker error с приватным статическим членом класса #1
C++
1
2
3
4
5
6
7
8
9
10
class Point3d {
        private:
                int x;
                int y;
                int z;
                static float Point3d::depth;
        public:
                void SetDepth(float value)
                        {Point3d::depth = value;}
}
Сколько искал - проблемы в линковке.. но у меня то класс в одном файле с main() описан. А ошибка дальше вылетает.
Код
[Linker Error] Unresolved external 'Point3d::depth' referenced from C:\USERS\ОЛЕКСАНДР\DESKTOP\PYRAMID3D\UNIT1.OBJ
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2013, 18:57     Linker error с приватным статическим членом класса
Посмотрите здесь:

[C++] декларация класса со статическим полем C++
linker error C++
Как получить private переменную класса, функцей членом другого класса C++
C++ Linker error msvcprtd.lib(msvcp100d.dll) error lnk2005 already defined libcpmtd.lib
C++ linker error в dev-c++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tzeentch
 Аватар для tzeentch
24 / 24 / 2
Регистрация: 13.04.2013
Сообщений: 79
14.10.2013, 19:15     Linker error с приватным статическим членом класса #2
Проблема в том, что вы пытаетесь обратится к члену, память под которого еще не выделили.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Point3d {
  private:
    static float depth;   // Определение
  public:
    void setDepth(float value);
};
 
float Point3d::depth;   // Выделение памяти
 
void Point3d::setDepth(float v) {
  Point3d::depth = v;    // Использование
}
 
int main() {
  Point3d pt;
  pt.setDepth(3.2);
}
Вот это "выделение памяти" должно находится в CPP-файле класса.
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
14.10.2013, 22:48  [ТС]     Linker error с приватным статическим членом класса #3
tzeentch, ну что сказать. Спасибо! Коротко и ясно. А я, видимо, упустил этот момент в учении.
tzeentch
 Аватар для tzeentch
24 / 24 / 2
Регистрация: 13.04.2013
Сообщений: 79
14.10.2013, 23:15     Linker error с приватным статическим членом класса #4
Был рад помочь =)
Если честно, я не уверен, что обьяснил причину ошибки верно
It works at least.
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
19.10.2013, 14:22  [ТС]     Linker error с приватным статическим членом класса #5
tzeentch, та нет, всё верно просто эту деталь еще, на тот момент, не знал
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
19.10.2013, 14:27     Linker error с приватным статическим членом класса #6
Правильнее было бы сказать, что модификатор static означает что переменная является глобальной (единой) для всех экземпляров класса, и обычно её сразу инициализируют (но не всегда).
В данном случае она инициализируется неопределенным значением.
Yandex
Объявления
19.10.2013, 14:27     Linker error с приватным статическим членом класса
Ответ Создать тему
Опции темы

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