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

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

Войти
Регистрация
Восстановить пароль
 
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
#1

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

14.10.2013, 18:57. Просмотров 242. Ответов 5
Метки нет (Все метки)

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 с приватным статическим членом класса
Посмотрите здесь:

не Компилируется [Linker Error] C++
Как исправить ошибку error C2039 "не является членом класса"? C++
ошибка [Linker Error] C++
linker error C++
C++ FreeType [Linker Error]
C++ linker error в dev-c++
Как сделать членом класса экземпляр этого же класса C++
C++ Ошибка [Linker Error]
C++ Пример класса со статическим членом
C++ Callback std::function + доступ к приватным полям класса методам которые не есть их полями
C++ Доступ дружественного оператора к приватным данным класса
Ошибка, связанная со статическим членом класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tzeentch
 Аватар для tzeentch
25 / 25 / 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
25 / 25 / 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
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
19.10.2013, 14:27     Linker error с приватным статическим членом класса #6
Правильнее было бы сказать, что модификатор static означает что переменная является глобальной (единой) для всех экземпляров класса, и обычно её сразу инициализируют (но не всегда).
В данном случае она инициализируется неопределенным значением.
Yandex
Объявления
19.10.2013, 14:27     Linker error с приватным статическим членом класса
Ответ Создать тему
Опции темы

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