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

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

Войти
Регистрация
Восстановить пароль
 
=gORB=
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 12
#1

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

31.05.2012, 15:16. Просмотров 633. Ответов 10
Метки нет (Все метки)

Всем доброго дня!
В программе есть класс, целиком описанный в .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++
Я объявляю класс Button (в .h файле): #pragma once #include <stdio.h> #include <allegro5/allegro.h> #include...

Error LNK2001. Создание абстрактного класса - C++
Задание: Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Создать производные классы Money и Fraction; ...

error LNK2001 - C++
Здравствуйте. Visual Studio 2010 выдаёт ошибку error LNK2001. Спомощью MFC Application создаю Edit Control. В классе CDeviceDlg...

Error LNK2001 - C++
Выдает ошибку error LNK2001 при пустой программе.

Error LNK2001 - C++
Учу С++ по самоучителю и он предложил код огромного проекта. #include <iostream> using namespace std; const int MaxSize = 100; ...

error LNK2001 - C++
беда, совсем беда. день тяжелый, мозг не работает. в общем пример из книжки. непосредственно мейн.цпп //_011.cpp #include...

Глобальные переменные - C++
Доброго времени суток всем. У меня следующая проблема: объявляю глобально переменную типа структуры dealer* root;. Далее в коде...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
31.05.2012, 15:34     error LNK2001 и глобальные переменные класса #2
переменные a b инициализированы ?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 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
1482 / 1058 / 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 и глобальные переменные класса
Еще ссылки по теме:

Глобальные переменные - C++
Подскажите пожалуйста, почему данные в глобальной переменной перезаписываются, а не плюсуются? Пример: int peremennaya; void...

глобальные переменные - C++
Пробовал объявить глобальные переменные следующим образом: в заголовочном файле head.h #ifndef DF_H #define DF_H //объявления...

Глобальные переменные - C++
Как в C++ завести глобальную (общую для функции и самой программы) переменную?

Глобальные переменные - C++
Здравствуйте . Разбираю пример с книги на использование глобальных переменных . Там был такой пример: #include "stdafx.h" #include...

Глобальные переменные - C++
Я правильно понимаю: "в c++ использовать глобальные переменные не безопасно, т. к. др. программы могут случайно поменять значение этих...


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

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

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

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

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