Как вы строите нестатическую точку входа в C++?
Я пытаюсь инициализировать игровой движок из моей основной точки входа, RPG.cpp. Вот что это включает в себя:
#include "stdafx.h"
#include "Engine.h"
int _tmain(int argc, _TCHAR* argv[])
{
Engine::Go();
return 0;
}
Engine: Go () является публичным методом, который запускает игровой движок. Однако это подчеркивается следующей ошибкой: "Ошибка: ссылка на нестатический элемент должна относиться к определенному объекту"
Прохождение моего класса двигателя и создание буквально всего в нем статического решает проблему, но это проблема сама по себе. Как мне обойти эту ошибку и не использовать ключевое слово static?
3 ответа
Сделайте экземпляр Engine
и позвонить Go()
в теме.
Engine e;
e.Go();
static
функции в основном бесплатные функции, которые имеют доступ к private
static
члены класса, к которому они принадлежат. Под "свободной функцией" я подразумеваю, что они не принадлежат экземпляру и в основном ведут себя как обычные функции C (за исключением их специальных прав доступа).
не-static
функции должны вызываться в экземпляре класса, к которому они принадлежат.
class Klass {
int i;
static int s_i;
public:
static void static_func() {
// called without an instance of Klass
// s_i is available because it is static
// i is not available here because it is non-static
// (belongs to an instance of Klass)
}
void non_static_func() {
// called on an instance of Klass
// s_i is available here because non_static_func() is a member of Klass
// i is also available here because non_static_func() is called on
// an instance (k) of Klass
}
};
void free_func() {
// s_i and i are both unavailable here because free_func()
// is outside of Klass
}
int main() {
// Klass::static_func() is called without an instance,
// but with the name qualifier Klass:
Klass::static_func();
// Klass::non_static_func() is called with an instance:
Klass k;
k.non_static_func();
// free_func() is called without any instance, and without a name qualifier:
free_func();
}
Вы, вероятно, хотите нестатические функции-члены и...
Engine engine;
engine.Go();
static
функции-члены не нужно вызывать для конкретного экземпляра объекта, но тогда они не будут иметь неявного this
указатель или неstatic
переменные-члены для доступа - они могут получить доступ только к другим static
Члены класса.
Вы должны на самом деле создать экземпляр Engine
учебный класс.
Например:
Engine e;
e.Go();