3

タイトルで目標を説明するために最善を尽くしましたが、ここではコードで説明しています。

struct Bar {
    Foo one;
    Foo two;
}

class Foo {
    Bar function();
}

これがうまくいかないことはわかっていますが、どうすればアイデアを実現できますか?構造体をグローバルにしたい理由は、main.cppでも使用されているためです。クラス内で構造体を宣言してから、クラス外で構造体をFoo :: Bar {}として定義しようとしましたが、それも機能しません。

これを実行したい理由は、商と剰余の両方を返す除算関数など、複数の変数を返す必要のある関数があるためです。ただし、問題は、カスタムクラス(BigInteger)の複数のインスタンスが返されることです。

4

2 に答える 2

4

次のようにクラス転送を行う必要があります。

class Foo;


struct Bar {
    Foo *one;
    Foo *two;
};

class Foo {
    struct Bar function();
};

これにより、実際にクラスを定義せずにクラスが宣言されるため、使用可能になります。

于 2011-10-23T04:52:28.820 に答える
4

Barのインスタンスが含まれているためFoo、前者の宣言で後者を不完全にすることはできません。Fooしたがって、宣言する前に宣言する必要がありますBar。ただし、オブジェクトFooを返す関数が含まれているため、宣言する前Barに前方宣言する必要があります。BarFoo

struct Bar;

class Foo {
    Bar function();
};

struct Bar {
    Foo one;
    Foo two;
};

Bar Foo::function()
{ 
  return Bar();
}

関数はオブジェクトをインスタンス化する必要があるため、の実際の定義はFoo::functionの宣言後にのみ表示されることに注意してください。BarBar

于 2011-10-23T05:00:06.040 に答える