anonymous@RULINUX.NET~# Last login: 2024-11-05 10:42:21
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[g++][член статический] Зачем так сделано?

Делаю класс примерно такого вида:

cpp
class MyClass {
        volatile static uint8_t Member;
public:
        inline static void  setMember(uint8_t v){
            Member=v;
        }
}
 


При попытке использовать где-либо метод, получаю от компайлера пиздюлей:
text
undefined reference to `MyClass::Member`
 


Оказывается я обязан ещё где-то объявить статический объект вне определения класса:
cpp
        #include "MyClass.h"
        volatile uint8_t MyClass::Member;
 


Зачем так сделано? Почему недостаточно в определении класса сообщить что у меня такой вот статический член класса используется и больше ничего не делать?

anonymous(*) (2011-11-12 16:23:08)

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [g++][член статический] Зачем так сделано? от anonymous 2011-11-12 16:23:08
avatar
Скрыть

Re:[g++][член статический] Зачем так сделано?

Потому что внутри объекта это declaration, а нужно ещё definition. Просто потому что для твоей переменной нужно выделить оперативу. Для не-статических переменных класса оператива выделяется когда создаётся экземпляр объекта. А статические есть вообще всегда, и должны где-то находиться в оперативе. При декларации же никакая оператива не выделяется, и физически до определения переменной есть тольео её упоминание, а её самой нет. Это как в plain c, можно объявить в скольки угодно модулях одну и ту же external var, но где-то в одном модуле она должна находиться объявленой.

bugmaker(*)(2011-11-13 00:08:35)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.04 (lucid) Firefox/3.6.17
[#] [Добавить метку] [Редактировать] Ответ на: Re:[g++][член статический] Зачем так сделано? от bugmaker 2011-11-13 00:08:35
avatar
Скрыть

Re:[g++][член статический] Зачем так сделано?

Да, но зачем с точки зрения языка так поступать? Когда ты объявляешь статическую переменную - ты и говоришь компилятору, что она есть всегда и должна находиться "где-то в оперативе". К чему заставлять кодера делать эти излишние телодвижения? Для этого должна быть какая-то веская причина, которой я не вижу.

anonymous(*)(2011-11-13 02:42:11)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[g++][член статический] Зачем так сделано? от anonymous 2011-11-13 02:42:11
avatar
Скрыть

Re:[g++][член статический] Зачем так сделано?

а её и нет. Концепция языка такая противоречивая. c++ fqa читал? в плюсах ещё навалом всяких странностей. Вот твой казус, если интересно http://yosefk.com/c++fqa/ctors.html#fqa-10.11

bugmaker(*)(2011-11-13 06:06:55)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.04 (lucid) Firefox/3.6.17
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!