【问题标题】:Pass on main class to other classes so they can access its functions将主类传递给其他类,以便它们可以访问其功能
【发布时间】:2012-11-01 03:06:58
【问题描述】:

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

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 如何让我的其他类从我的主类访问函数?

【问题讨论】:

  • C++ 中没有主类。它只是一个函数。
  • 一旦“this”进入你的单元,你希望如何使用它?

标签: c++ class main


【解决方案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);
}

【讨论】:

  • 谢谢,我会试试看的。
  • 所以我按照你说的做了,尽管我必须删除 main_object; 之前的“&”。也许他们很重要?在修复了一些其他小错误后,我导致它完美运行,谢谢。
  • @2GG:您尝试使用this,它是 C++ 中的指针,所以我举了一个带有指针的示例。如果您的实际代码使用引用,那么删除 &amp; 应该是正确的。如果它制作副本,那么它可能已损坏。
【解决方案2】:

c++ 不像 java。您不需要在一个类中包含所有方法(或在 c++ 中调用的函数)。

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2011-01-19
      • 1970-01-01
      相关资源
      最近更新 更多