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

error LNK2001 и глобальные переменные класса - C++

Восстановить пароль Регистрация
 
=gORB=
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 12
31.05.2012, 15:16     error LNK2001 и глобальные переменные класса #1
Всем доброго дня!
В программе есть класс, целиком описанный в .h файле. Структура, приблизительно, такая:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//test.h
class tC
{
public:
       tC()
       {
       }
       ~tC()
       {
       }
 
       static void f1()
       {
              a = 1+1;
       }
       static void f2()
       {
              b = a+2;
       }
 
private:
       static int a;
       static int b;
}
При вызове функций f1 и f2 из методов других классов (даже если они - наследники tС),
линкер выдает ошибку "error LNK2001: unresolved external symbol "private: static int tC::a"..."
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 15:16     error LNK2001 и глобальные переменные класса
Посмотрите здесь:

C++ error LNK2001
error LNK2001 C++
Глобальные и статические глобальные переменные C++
C++ Глобальные переменные в методе класса
Глобальные переменные C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
31.05.2012, 15:34     error LNK2001 и глобальные переменные класса #2
переменные a b инициализированы ?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
31.05.2012, 15:53     error LNK2001 и глобальные переменные класса #3
Замени private на protected.
=gORB=
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 12
31.05.2012, 16:05  [ТС]     error LNK2001 и глобальные переменные класса #4
А где именно они должны быть инициализированы?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
31.05.2012, 16:11     error LNK2001 и глобальные переменные класса #5
можно в том же заголовке только вне класса:
C++
1
2
3
4
5
6
class tC{
//trololo
};
 
int tC::a=0;
int tC::b =0;
=gORB=
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 12
31.05.2012, 16:51  [ТС]     error LNK2001 и глобальные переменные класса #6
Цитата Сообщение от antoha398 Посмотреть сообщение
можно в том же заголовке только вне класса:
C++
1
2
3
4
5
6
class tC{
//trololo
};
 
int tC::a=0;
int tC::b =0;
Попробовал, выдаёт error LNK2005 ... a (.....) already defined in main.obj. В main на самом деле нет ничего, кроме вызова главного окна интерфейса.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
31.05.2012, 16:58     error LNK2001 и глобальные переменные класса #7
если можете выкладывайте программу сюда. так проще будет разобраться.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
31.05.2012, 17:02     error LNK2001 и глобальные переменные класса #8
похоже в h файле нет стражей вклчения (http://ru.wikipedia.org/wiki/Include_guard)
это или pragma ones или
C++
1
2
3
4
5
6
#ifndef __SOME_UNIQUE_WORDS_H__
#define __SOME_UNIQUE_WORDS_H__
 
 ...
 
#endif
=gORB=
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 12
31.05.2012, 17:24  [ТС]     error LNK2001 и глобальные переменные класса #9
Приведу часть программы, в которой и появляется эта проблема. Вся программа очень объёмная.
ST_earthsat.h - файл класса, содержащего глобальные переменные
TLEproc - класс вызывающий методы ST_earthsat.
Вложения
Тип файла: rar prog.rar (7.9 Кб, 5 просмотров)
=gORB=
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 12
31.05.2012, 17:39  [ТС]     error LNK2001 и глобальные переменные класса #10
А вообще, не могу понять - откуда взялась эта проблема. Сто раз объявлял глобальные переменные в заголовке класса и они спокойно были видны во всех методах. А что тут не так, ума не приложу.
Видимо дело в статике, но без него методы ругаются на "illegal referance to non-static member...". Хотя, опять таки, без статики всегда всё работало.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 17:49     error LNK2001 и глобальные переменные класса
Еще ссылки по теме:

Error LNK2001 C++
C++ Error LNK2001. Создание абстрактного класса
C++ Error LNK2001

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

Или воспользуйтесь поиском по форуму:
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
31.05.2012, 17:49     error LNK2001 и глобальные переменные класса #11
эээх, не давно на языках, препод объяснял про эти проблемы линковки.

в общем, ошибки на этапе линковки, возникают при "перегрузках" функции (одна и таже но с разными параметрами. или несоответствие прототипа и функции в хедере и цпп, или в двух цпп) или переменные\структуры\функции были объявлены в других цпп.

но, я плохо слушал точнее, слушал, но забыл, так как не записывал
Yandex
Объявления
31.05.2012, 17:49     error LNK2001 и глобальные переменные класса
Ответ Создать тему
Опции темы

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