Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Статические переменные и VDSP 4.5 компилятор c++
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Pathfinder
Пытаюсь объявить статическую переменную в классе, при компиляции по поводу этой переменной выдается что-то вроде:
"The following symbols referenced in processor 'p0' could not be resolved: ... ..."
Убираю модификатор static - все работает.
В чем может быть дело?
jorikdima
Вы ее инициализируете глобально???
Pathfinder
А каким образом ее правильно инициализировать?
объявление выглядит примерно так:
Код
class A;
class B
{
protected:
    static A a;
};
dxp
Цитата(Pathfinder @ Mar 2 2007, 16:56) *
Пытаюсь объявить статическую переменную в классе, при компиляции по поводу этой переменной выдается что-то вроде:
"The following symbols referenced in processor 'p0' could not be resolved: ... ..."
Убираю модификатор static - все работает.
В чем может быть дело?

Это, очевидно, линкер ругается. Дело в том, что статические объекты не принадлежат объектам класса - т.е. никакой объект класса не содержит в себе статичесих объектов своего класса. Статический объект класса - это по сути обычный объект (переменная) со static storage duration (глобальным временем жизни), т.е. как обычная переменная, объявленная за пределами функций. Отличие статического объекта-члена класса от таких переменных только в том, что он объявлен в пространстве имен своего класса.Только и всего. Из этого следует, что программист должен для этого объекта сам руками выделить память - при создании объекта класса память выделяется только под нестатические члены. Т.е. нужно сделать нечто в этом роде:

Код
class TSlon
{
    ...
    static int a;
    ...

};
...

int TSlon::a;  // выделили память


Вот тогда под эту переменную будет выделена память, она будет помещена в соответствующую секцию данных и линкер все успешно найдет.

Кстати, можно вообще не создавать ни одного объекта класса, но статическая переменная все равно будет существовать и ей можно пользоваться. Т.е. у нее по сути своя отдельная жизнь. smile.gif
Pathfinder
to dxp, спасибо, все заработало!
подзабыл каким образом ее правильно определять + привычка к особенностям Visual С (там вроде определение и инициализация статического члена включается в раздел инициализации членов конструктора)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.