Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> static член класса 
:(
    Опции темы
<Spawn>
Дата 3.2.2004, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Начал изучать классы Си и появилась некоторая проблема:
Почему то при попытке изменить любым образом такую переменную компилятор выдает(C++ Builder 6) : "[Linker Error]Unresolved external Screens:size referenced from C:\...", например:

Код
class Screens{
 ...
 static int size;
 ...
 static void AddSize(const int val) { size += val;}
 ...};

//ошибка возникает при попытке вызова такой функции
 Screen sc;
 sc.AddSize(20);



или так:

Код
Screens::size = 20;




--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Vyacheslav
Дата 3.2.2004, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Треубется зарезервировать память по static -член, посредством дполнительного объявления-инициализации
*.h
Код

class Screens{
...
static int size;
...
//static void AddSize(const int val) { size += val;} - неправильное обращаение к size
...};

*.cpp
Код

int Screens::size = 20;




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
C'hoosen++
Дата 3.2.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 21.1.2004

Репутация: нет
Всего: нет



Компилятор не может увеличить size на 20, так как он не знает начальной
величины переменной. То есть необходимо создать конструктор, обнуляющий size:
Код

class Screens{
private:
   static int size;
public:
  Screens(): size(0)
 { }
 ...
    static void AddSize(const int val) { size += val;}
...};
 

А уже потом производить операцию с size.

Модератор RAN: Этот ответ на вопрос на самом деле не верен.

Это сообщение отредактировал(а) RAN - 3.2.2004, 21:48
PM MAIL   Вверх
Vyacheslav
Дата 3.2.2004, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Неверно. Правильный ответ смотри выше smile.gif
достаточно добавить даже просто
Код

int Screens::size;

И все будет работать, ибо сказано в писании smile.gif ISO/IEC 14882

Цитата

9.4.2 Static data member.
...
2. The declaretion of static data memeber  in its class definition is not definition ...
The defibition for static data member shall appearin namespce scope enclosing the member's class definition. In the definition at namespace scope, the name of the static data members shall be qualified by iys class name using the ::operator.



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.