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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс и счетчик его экземпляров 
:(
    Опции темы
Godfree
Дата 28.2.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Начал изучать MFC и ООП подход. Проблему - в качестве самоучебного примера создал класс и в нем по логике static переменную для подсчета количества созданных экземпляров класса:

Код

class instr
{
public:
    instr();
    static int counter;
};

instr::instr()
{
                counter++;
        cout << "No Parameter constructor "  << endl;
};



Компиляция проходит, но линкер говорит 
1>test.obj : error LNK2001: unresolved external symbol "public: static int instr::counter" (?counter@instr@@2HA)
1>C:\VCCProjects\DuSearch 0.1\Release\Ctest.exe : fatal error LNK1120: 1 unresolved externals


А если я попытаюсь инициализировать counter:

Код

class instr
{
public:
    instr();
    static int counter = 0;
};

instr::instr()
{
                counter++;
        cout << "No Parameter constructor "  << endl;
};



то уже компилятор говорит, что:
1>c:\vccprojects\dusearch 0.1\ctest\ctestclasses.h(11) : error C2864: 'instr::counter' : only static const integral data members can be initialized within a class

Но если я сделаю counter константой, то смысл мне тогда в камне недвижимом?

Что я делаю не так?
Как мне с помощью конструктора наращивать counter и почему на стандартные C++ конструкции и правила ООП компоновщик или линкер ругаются? 
P.S. Использую Visual Studio 2008...

Это сообщение отредактировал(а) Godfree - 28.2.2010, 18:44
PM MAIL   Вверх
bsa
Дата 1.3.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Начну с того, что изучать MFC если этого не требует учитель/работодатель. Ибо она уже давно устарела.
Инициализацию неконстантных статических переменных класса нужно производить в файле РЕАЛИЗАЦИИ (*.cpp):
Код
int instr::counter = 0;

Почитай это, в частности ++i или i++.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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