Привет в моем 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
Статическая переменная внутри класса на самом деле является внешней декларацией. Вам все еще нужно определение переменной. Это похоже на внешние переменные C.
Итак, в файле .h:
class Bullet
{
public:
static bool active;
};
и в файле .cpp в глобальной области видимости:
bool Bullet::active = false;
Отсутствие переменной определение (не объявление) выводится, потому что ваше сообщение об ошибке на самом деле исходит от компоновщика, а не компилятора.
статические члены класса должны быть определены где-то, в вашем случае должен быть
bool Bullet::active;
определение в файле cpp по вашему выбору (файл, который включает в себя объявление класса).
Вы можете думать о статических членах как о глобальных переменных, которые находятся в «пространстве имен» класса. Объявление класса как таковое не создает никаких объектов, даже статических членов, это просто объявление.
Вы забыли указать тип переменной (то есть, чтобы определить объект). Написать
bool Bullet::active = false;
вместо
Bullet::active = false;
То есть сначала вы должны определить объект, и только после этого вы можете назначить его.
Что касается заявления, которое вы показали
Bullet::active = false;
тогда это не определение активного. Это оператор присваивания.
Примите во внимание, что определение должно быть помещено в некоторый модуль. Если вы поместите его в заголовок, вы можете получить ошибку, что объект уже определен.