Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2014, 15:55   #1
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
Стрелка static объекты в статической библиотеке

Здравствуйте.
Столкнулся с неприятным ограничение - статические объекты (члены сложных типов) теряются в статической библиотеке. Компилятор gcc.
Код:
int i;                       // ok
struct S
{
    static int i;                   // undefined reference
    static const int i {0};    // ok
};
Можно что-нибудь придумать? Может какие опции линкеру?

Последний раз редактировалось 220Volt; 24.01.2014 в 16:01. Причина: ::static int -> int i
220Volt вне форума Ответить с цитированием
Старый 24.01.2014, 15:57   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

220Volt

статические объекты (члены сложных типов) теряются в статической библиотеке

не "теряются" а "потерял"

int S::i;
Rififi вне форума Ответить с цитированием
Старый 24.01.2014, 16:15   #3
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
220Volt
int S::i;
Как-то особенно нужно записать? Крутил, вертел - ничего не получилось.
220Volt вне форума Ответить с цитированием
Старый 24.01.2014, 16:31   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

undefined reference.

хм, а в хидерах либы упоминание то есть об этих объектах?(причем как extern)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.01.2014, 16:41   #5
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Вроде разобрался.
Когда в заголовке это:
Код:
struct S
{
    static int i;
};
в .cpp должно быть это (касается статической либы):
Код:
int S::i;
Наверное Rififi это имел в виду. Спасибо.
220Volt вне форума Ответить с цитированием
Старый 24.01.2014, 16:43   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от 220Volt Посмотреть сообщение
Здравствуйте.
Столкнулся с неприятным ограничение - статические объекты (члены сложных типов) теряются в статической библиотеке. Компилятор gcc.
Код:
int i;                       // ok
struct S
{
    static int i;                   // undefined reference
    static const int i {0};    // ok
};
Можно что-нибудь придумать? Может какие опции линкеру?
не константная статическая переменная должна быть проинициализированна вне класса:

int S::i;
_Bers вне форума Ответить с цитированием
Старый 24.01.2014, 16:57   #7
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
не константная статическая переменная должна быть проинициализированна вне класса:

int S::i;
Именно так, спасибо.
220Volt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
static и non-static context kos1nus Общие вопросы по Java, Java SE, Kotlin 1 17.07.2013 00:10
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты ИльназВ C# (си шарп) 13 22.11.2012 19:00
Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной Comst95 Паскаль, Turbo Pascal, PascalABC.NET 1 03.01.2012 18:46
Ресурсы в статической библиотеке. EUGY Общие вопросы C/C++ 0 09.07.2011 17:35
Списки в статической памяти. *Натали* Помощь студентам 5 14.04.2010 11:48