Другие языки программирования и технологии

С++ Наследование и статические переменные

Есть базовый класс и два порожденных, нужно сделать отдельный счетчик созданных объектов для каждого порожденного класса. Компилятор выдает ошибку при объявлении статической переменной в порожденных классах. Посоветуйте, как выйти из ситуации?
Ооо Лидер
Ооо Лидер
4 063
#include <iostream>
class counter {
public:
static void inc_a() { ++count_a_; }
static void dec_a() { --count_a_; }
static void inc_b() { ++count_b_; }
static void dec_b() { --count_b_; }
protected:
static int count_a_;
static int count_b_;
};
struct a : counter {
a() { inc_a(); }
~a() { dec_a(); }
static int count_a() { return count_a_; }
};
struct b : counter {
b() { inc_b(); }
~b() { dec_b(); }
static int count_b() { return count_b_; }
};
int counter::count_a_ = 0;
int counter::count_b_ = 0;
int main() {
a oa1;
std::cout << "a: " << oa1.count_a() <<'\n';
a o2;
std::cout << "a: " << oa1.count_a() << '\n';
oa1.~a();
std::cout << "a: " << o2.count_a() << '\n';
b ob1;
std::cout << "b: " << ob1.count_b() << '\n';
b ob2;
std::cout << "b: " << ob1.count_b() << '\n';
ob1.~b();
std::cout << "b: " << ob2.count_b() << '\n';
system("pause");
}
...загадка ...
...загадка ...
66 312
Лучший ответ
Сергей Злобин Это работает только потому что создаются объекты одного класса.
Сергей Злобин Тут один счётчик на все классы. А нужен отдельный счётчик на каждый класс.
Надо учитывать, что статические члены класса привязаны к классу только в исходном коде, но не во время выполнения программы. В С++ нельзя создать переменные класса или методы класса.
ЮС
Юрий Сугако
58 065
Надо разобраться почему компилятор выдает ошибку. статической - не static надеюсь
Ооо Лидер static int count, а в чем тут проблема может быть?
Код на ideone или pastebin или gist или ещё куда-нибудь, только не сюда

Ты так хочешь сделать? https://ideone.com/zxzhqj
Ооо Лидер весь код огромный, скинул отрывок
class Publication2 : private Publication
{
...
};
class Book : public Publication2
{
private:
int quantity;
static int countB;
...
}
class Type : public Publication2
{
private:
int time;
static int countT;
...
}