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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2011, 20:32   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Статические члены класса

Code::Blocks выдаёт ошибку Undefined reference to MyClass::count.
Вот код:
Код:
#include <iostream>

using namespace std;

class MyClass
{
    public:
    static int count;
    MyClass()
    {
        count++;
        cout<<count<<endl;
    }
};

int main()
{
    MyClass A;
    return 0;
}
_-Re@l-_ вне форума Ответить с цитированием
Старый 20.01.2011, 21:06   #2
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Страуструп: "Если локальные
объекты описаны со служебным словом static, то они также существуют до конца программы.
Инициализация их происходит, когда в первый раз управление "проходит через" описание этих
объектов..." и "...Вводится понятие статических членов (static), которые используются для
представления операций и данных, относящихся к самому классу, а не к отдельным его объектам..."
Соответственно в конструкторе использовать нельзя.

Последний раз редактировалось KemanSR; 20.01.2011 в 21:19.
KemanSR вне форума Ответить с цитированием
Старый 20.01.2011, 21:27   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

2 _-Re@l-_
Под статические переменные класса надо выделить память, т.е. описать их после без слова статик.
p51x вне форума Ответить с цитированием
Старый 20.01.2011, 21:35   #4
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Как насчет
Код:
cout<<MyClass::count<<endl;
count естественно должен быть инициализирован значением.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 20.01.2011, 21:40   #5
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от Dayman Посмотреть сообщение
count естественно должен быть инициализирован значением.
Глобальные переменные и static, если не были инициализированы, инициализируются нулевым значением.
KemanSR вне форума Ответить с цитированием
Старый 20.01.2011, 21:42   #6
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Цитата:
Сообщение от KemanSR Посмотреть сообщение
Глобальные переменные и static, если не были инициализированы, инициализируются нулевым значением.
Да. Но к коду первого поста это не относится.
Не хватает
Код:
int MyClass::count;
за пределами класса.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 20.01.2011, 22:22   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Сообщение от KemanSR Посмотреть сообщение
Страуструп: "Если локальные
объекты описаны со служебным словом static, то они также существуют до конца программы.
Инициализация их происходит, когда в первый раз управление "проходит через" описание этих
объектов..." и "...Вводится понятие статических членов (static), которые используются для
представления операций и данных, относящихся к самому классу, а не к отдельным его объектам..."
Соответственно в конструкторе использовать нельзя.
чота я тебя не понял. с чего это ты решил что статические члены класса/локальные статические переменные нельзя использовать в конструкторе? как ты пришел к этому умозаключению?

Dayman верно говорит, нужно инициализировать переменную вне класса
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.01.2011, 23:06   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

2 Dayman
Я написал не то же самое?
p51x вне форума Ответить с цитированием
Старый 20.01.2011, 23:18   #9
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
2 Dayman
Я написал не то же самое?
Да. Но я дальше
Цитата:
Сообщение от p51x Посмотреть сообщение
выделить память
не прочитал :[
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезагрузка оператора и приватные члены класса. Gundos Общие вопросы C/C++ 4 17.01.2011 18:47
члены последовательности amikulia Помощь студентам 0 14.01.2011 12:35
Статические массивы aus Общие вопросы C/C++ 1 17.10.2010 15:32
Скрыть члены класса от 'CodeGuide' в MVS 2005-08 Руслантус Общие вопросы C/C++ 2 26.12.2009 16:13
статические переменные cooperOk JavaScript, Ajax 1 18.11.2009 12:01