2

したがって、オブジェクトがメインクラス内の関数を使用できるようにする必要があるため、オブジェクトが作成されたときに、パラメーターを介してオブジェクトを取得する必要があります。

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);
    }

私が「これ」を置くところ、それはメインクラスであるべきです、これは私がJavaでそれをする方法ですが、私はここでそれをする方法がわかりません。「*this」と「this」を試しましたが、エラーが発生するだけです。非メンバー関数での「this」の使用が無効です。エラーを検索しても、c ++のクラスシステムについてはかなり知らないので、何も処理できませんでした。

最初の2つのパラメーターは、場所用です。Initコマンドパラメータは、それらが味方であるかどうかを設定します。

Unitクラスがアクセスできるようにしたい:

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

後でここにもっと多くのコードがあるはずです。私はそれらを返してもらうことを試みています。

Code ::BlocksIDEとGNUGCCコンパイラを使用しています。

TL; DR他のクラスにメインクラスの関数にアクセスさせるにはどうすればよいですか?

4

3 に答える 3

1

C ++では、mainはクラスでもクラスの一部でもthisないため、そのコンテキストでは意味がありません。

于 2012-11-12T17:02:12.590 に答える
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);
}
于 2012-11-12T17:05:17.870 に答える
0

C++はJavaとは異なります。クラス内にすべてのメソッド(またはc ++で呼び出される関数)を含める必要はありません。

mainは関数であり、クラスではありません。ありませんthis

これで、グローバル変数を使用したり、変数/オブジェクトをヒープに配置して他のクラスで使用できるようになりますが、通常、c#には実際にはMainクラスがありません。

于 2012-11-12T17:04:16.053 に答える