Использование статической переменной-члена

Привет в моем class Bullet Я объявляю активный как ложный, когда bullet не активен и правда, когда это так. В моем другом class это не связано с моим Bullet class в любом случае я хочу использовать bool член active и изменить его, как я могу это сделать?

Я получаю ошибку

Error 18 error LNK2001: unresolved external symbol "public: static bool Bullet::active" (?active@Bullet@@2_NA) C:\Skolarbete\Programmering i C++\ProjectTemplate\ProjectTemplate\Alienrow.obj ProjectTemplate

Декларация: static bool active;

Когда я использую это: Bullet::active = false;

Я тоже новичок C++ так что не ненавидь! Ценю всю помощь, которую я могу получить: D

0

Решение

Статическая переменная внутри класса на самом деле является внешней декларацией. Вам все еще нужно определение переменной. Это похоже на внешние переменные C.

Итак, в файле .h:

class Bullet
{
public:
static bool active;
};

и в файле .cpp в глобальной области видимости:

bool Bullet::active = false;

Отсутствие переменной определение (не объявление) выводится, потому что ваше сообщение об ошибке на самом деле исходит от компоновщика, а не компилятора.

1

Другие решения

статические члены класса должны быть определены где-то, в вашем случае должен быть

bool Bullet::active;

определение в файле cpp по вашему выбору (файл, который включает в себя объявление класса).
Вы можете думать о статических членах как о глобальных переменных, которые находятся в «пространстве имен» класса. Объявление класса как таковое не создает никаких объектов, даже статических членов, это просто объявление.

0

Вы забыли указать тип переменной (то есть, чтобы определить объект). Написать

bool Bullet::active = false;

вместо

Bullet::active = false;

То есть сначала вы должны определить объект, и только после этого вы можете назначить его.

Что касается заявления, которое вы показали

Bullet::active = false;

тогда это не определение активного. Это оператор присваивания.

Примите во внимание, что определение должно быть помещено в некоторый модуль. Если вы поместите его в заголовок, вы можете получить ошибку, что объект уже определен.

0
По вопросам рекламы [email protected]