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

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

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

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

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

Пример класса со статическим членом - C++
Привести пример со статическим членом класса и примеры доступа к нему.

Ошибка, связанная со статическим членом класса - C++
Есть код: class Foo{ public: static void f(); int a; }; void Foo::f(){ std::cin >> a; }

Как исправить ошибку error C2039 "не является членом класса"? - C++
\Employee.cpp(20) : error C2039: YearsofService: не является членом "Employee" 1> c:\users\кварц3\desktop\student\решенные задачи...

Доступ дружественного оператора к приватным данным класса - C++
Здравствуйте. тока начал изучение С++; составляю прогу практически по учебнику - реализация класса Стринг при компиляции компилятор...

Работа со статическим полем класса - C++
Добрый вечер. Подскажите, как добавить в вектор какое-либо значение в этом случае? Ошибка 2001 вылазит, неразрешенный внешний символ... ...

[C++] декларация класса со статическим полем - C++
Не сингелтон, а класс со статическим именно полем, а не экземпляром. Как это пишется, я знаю, если у меня будет реальная задача на такое...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
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, та нет, всё верно просто эту деталь еще, на тот момент, не знал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 14:27     Linker error с приватным статическим членом класса
Еще ссылки по теме:

Linker Error: Undefined symbol istream.. - C++
Linker Error: Undefined symbol istream::getline(char near*, > int, unsigned char) in module program.cpp. Пишет при попытке запуска...

Не могу откомпилировать. mpich2 [Linker error] - C++
Добрый день. Обгуглил, поиском на форуме искал.. не разобрался.. Помогите пожалуйста. IDE Dev-C++ #include <mpi.h> #include...

[Linker Error] Unresolved external '_Form1' - C++
День добрый! При попытке скомпилировать программу в Borland C++6 , выдается след. сообщение: Unresolved external '_Form1'...

[Linker Error] undefined reference to `instructions()' - C++
Dev c++ #include <iostream> using namespace std; void instructions(); int main() { instructions(); return 0;} void...


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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
19.10.2013, 14:27     Linker error с приватным статическим членом класса #6
Правильнее было бы сказать, что модификатор static означает что переменная является глобальной (единой) для всех экземпляров класса, и обычно её сразу инициализируют (но не всегда).
В данном случае она инициализируется неопределенным значением.
Yandex
Объявления
19.10.2013, 14:27     Linker error с приватным статическим членом класса
Ответ Создать тему
Опции темы

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