如何在c ++中构建非静态入口点?

时间:2014-08-14 03:22:19

标签: c++ static main

我正在尝试从我的主要入口点RPG.cpp初始化我的游戏引擎。这就是它的内容:

#include "stdafx.h"
#include "Engine.h"


int _tmain(int argc, _TCHAR* argv[])
{
    Engine::Go();
    return 0;
}

引擎:Go()是一个启动游戏引擎的公共方法。但是,它带有以下错误的下划线:“错误:非静态成员引用必须相对于特定对象”

通过我的引擎类并使字面上的所有内容静态修复问题,但这本身就是一个问题。如何解决此错误而不使用关键字static?

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

您必须实际创建Engine类的实例。

例如:

Engine e;
e.Go();

答案 2 :(得分:0)

您可能需要非静态成员函数和...

Engine engine;
engine.Go();

static个成员函数不需要在特定对象实例上调用,但是他们不会有隐式this指针或非static要访问的成员变量 - 他们只能访问该类的其他static成员。