реклама на сайте
подробности

 
 
> Статические переменные и VDSP 4.5 компилятор c++
Pathfinder
сообщение Mar 2 2007, 13:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 29-06-05
Пользователь №: 6 400



Пытаюсь объявить статическую переменную в классе, при компиляции по поводу этой переменной выдается что-то вроде:
"The following symbols referenced in processor 'p0' could not be resolved: ... ..."
Убираю модификатор static - все работает.
В чем может быть дело?


--------------------
ADC / DAC LC Filter Designer — Удобный инструмент проектирования LC-фильтров для ЦАП и АЦП
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Mar 2 2007, 14:32
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016