powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Статическая переменная в классе
12 сообщений из 12, страница 1 из 1
Статическая переменная в классе
    #34038862
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для идентификации каждого экземпляра класса OList ввел статическую переменную mdbg, но при попытке использовать ее в конструкторе появились ошибки типа:
Код: plaintext
rnd error LNK2001: unresolved external symbol "public: static int OList<class Tag *>::mdbg" (?mdbg@?$OList@PAVTag@@@@2HA)
что тут не так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class OList
{
public:
    typedef OListNode<T> NodeT;
protected:
    NodeT *m_list;
    static int mdbg;//debugging
public:
    OList()
    {
        m_list = NULL;
	printf("\nOList CONSTRUCTOR class N %d", ++mdbg); //эта строка вызывает ошибки
    }
.........
.........
.........
};

int  OList<class T>::mdbg =  0 ;
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34038895
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
int OList::mdbg=0;
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34038896
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik
Код: plaintext
1.
typedef OListNode<T> NodeT;

какая-то попытка шаблона?
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34038926
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык Olist не шаблонный класс.
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039073
Aram84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по моему надо инициализировать переменную ато как без етого сделать ++
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039345
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
niknameДык Olist не шаблонный класс.

Простите забыл добавить перед классом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
template <class T>
struct OListNode
{
    T value;
    OListNode<T> *next;
};

template <class T>
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039366
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда, предположительно, нужно написать
int Olist<MyClass>::mdbg=0;
И лучше это сделать там же (в том же модуле), где первый раз инстанцируется

Olist<MyClass> qqqq;
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039372
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
niknameТогда, предположительно, нужно написать
int Olist<MyClass>::mdbg=0;
И лучше это сделать там же (в том же модуле), где первый раз инстанцируется

Olist<MyClass> qqqq;

а если у меня несколько классов MyClass1, MyClass2, то как сколько же раз мне ее объявлять?

int OList<MyClass1>::mdbg = 0;

int OList<MyClass2>::mdbg = 0;

и т.д. ?
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039380
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да. Шаблон инстанцируется столько раз, сколько вы пишете MyTemplate<ClassN>. Соответственно каждый из них требует свою статическую переменную.
Если вам нужна одна на всех, то сделайте класс
class MyDbg{
static int mydbg;
};

template <class T>Olist{

MyDbg *m_debug;
};

Если вы пронаследуете MyDbg, то окажетесь в той же ситуации.
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039388
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, уточню. Столько раз сколько разных классов в угловых скобках.
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039450
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, думаю удобнее будет воспользоваться одним отдельным классом, как вы посоветовали.
Но почему не работает int OList<class T>::mdbg = 0;, т.е. почему не выполняется подстановка компилятором самостоятельно, тем более, что само объявление:
Код: plaintext
int  OList<class T>::mdbg =  0 ;
воспринимается нормально.
...
Рейтинг: 0 / 0
Статическая переменная в классе
    #34039455
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю. Возможно - ошибка компилятора. Linker явно сказал о том, что он не нашёл такой класс, почему компилятор пропустил - не вполне понятно.

Понятно!
Компилятор ждал, что class Tag будет где-то инстанцирован.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Статическая переменная в классе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]