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

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

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

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

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

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

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

Странная ошибка: [Linker error] undefined reference to `__dyn_tls_init_callback' [Linker error] undefined reference to ld returned 1 exit status - C++
Здравствуйте. Вот недавно начал изучать книгу "С++ для чайников" Стефан Р. Девис 4-е издание. И напоролся на кучу ошибок) Но смог все...

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

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

Как получить private переменную класса, функцей членом другого класса - C++
Игра змейка: Есть класс поле в котором содержится размеры поля: class field { private: int FIELD_START; int...

5
tzeentch
25 / 25 / 2
Регистрация: 13.04.2013
Сообщений: 79
14.10.2013, 19:15 #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-файле класса.
1
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
14.10.2013, 22:48  [ТС] #3
tzeentch, ну что сказать. Спасибо! Коротко и ясно. А я, видимо, упустил этот момент в учении.
0
tzeentch
25 / 25 / 2
Регистрация: 13.04.2013
Сообщений: 79
14.10.2013, 23:15 #4
Был рад помочь =)
Если честно, я не уверен, что обьяснил причину ошибки верно
It works at least.
0
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
19.10.2013, 14:22  [ТС] #5
tzeentch, та нет, всё верно просто эту деталь еще, на тот момент, не знал
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
19.10.2013, 14:27 #6
Правильнее было бы сказать, что модификатор static означает что переменная является глобальной (единой) для всех экземпляров класса, и обычно её сразу инициализируют (но не всегда).
В данном случае она инициализируется неопределенным значением.
1
19.10.2013, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 14:27
Привет! Вот еще темы с ответами:

Как сделать членом класса экземпляр этого же класса - C++
class Operation { public: bool type; //true = operation, false = number char Operator; Operation L_Op; Operation R_Op; ...

Linker error msvcprtd.lib(msvcp100d.dll) error lnk2005 already defined libcpmtd.lib - C++
Господа, забрал из VSS солюшен (из 5 проектов) для VS2010 и стал его собирать. Увлекательный квест "собери меня" через неделю (с...

Callback std::function + доступ к приватным полям класса методам которые не есть их полями - C++
Проблема, товарищи. В прикрепленном архиве 3 файла, из которых состоит моя программа: **main.cpp; prototypes.h; realization.cpp** 1....

linker error - C++
есть описание класса #ifndef bulka_h #define bulka_h using namespace std; class bulka { private: ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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