Как вы строите нестатическую точку входа в 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 функции в основном бесплатные функции, которые имеют доступ к privatestatic члены класса, к которому они принадлежат. Под "свободной функцией" я подразумеваю, что они не принадлежат экземпляру и в основном ведут себя как обычные функции 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();
Другие вопросы по тегам