将主类传递给其他类,以便它们可以访问其功能

时间:2012-11-12 17:00:59

标签: c++ class main

所以我需要我的对象能够使用主类中的函数,所以当它们被创建时我希望它们通过它们的参数来获取它。

int main(int argc, char* args[])
    {
    Unit units[3]={{5,5,this},{8,8,this},{12,12,this}};
    units[0].init(true);
    for (int i=1;i<sizeof(units) / sizeof(units[0]);i++) {
        units[i].init(false);
    }

我把“this”放在主要类中,这就是我在java中的方式,但我不确定如何在这里做。我试过“* this”和“this”,但我得到的只是一个错误: 在非成员函数中使用'this'无效。 搜索错误让我没有任何工作,因为我对c ++的类系统不太了解。

这两个第一个参数是针对该位置的。 Init命令参数设置它们是否是盟友。

我希望Unit类能够访问:

int getClosestHostileX(int ask_x,int ask_y,bool team) {
    return 55;
}

以后应该有更多的代码,我只是想让他们回来。

我正在使用Code :: Blocks IDE和GNU GCC编译器。

TL; DR如何让我的其他类从我的主类访问函数?

3 个答案:

答案 0 :(得分:1)

在C ++中,main不是类,也不是类的一部分,因此this在其上下文中没有意义。

答案 1 :(得分:1)

你也不能用Java做到这一点。在Java中,入口点是一个静态方法,没有关联的对象实例。

解决方案是相同的 - 实例化您的类型。

int main(int argc, char** argv)
{
   MainClass main_object; // creates an instance
   Unit units[3]={{5,5,&main_object},{8,8,&main_object},{12,12,&main_object}};
   units[0].init(true);
   for (int i=1;i<sizeof(units) / sizeof(units[0]);i++) {
      units[i].init(false);
}

答案 2 :(得分:0)

c ++与java不同。您不需要在类中拥有所有方法(或在c ++中调用它们的函数)。

main是一个函数,而不是一个类。没有this

现在你可以拥有全局变量,或者你可以将变量/对象放在堆上,以便其他类能够使用,但一般来说,c#实际上没有Main类。