0

午後は、スタック オーバーフローに関する最初の質問です。明確にするために最善を尽くします。

Class 1 と main() 関数の両方で参照する必要があるクラス "Class 2" のオブジェクト "Objects2[arraySize]" の配列を作成しました。

Class1.h

class Class1
{
public:
  void parseFunction(several parameters);

private:
  int otherVariables; 
};

Class1.cpp

#include "Class1.h"

void Class1::parseFunction(several parameters)
{
  for(int i = 0; i < arraySize; i++)
  {
    Objects2[i].someMemberFunction();
  }
}

主要

#include "Class1.h"

main()
{
  Class2 Objects2[arraySize];    //Arbitrary array size
  Class1 Object1;

  Object1.parseFunction(some parameters);

  for(int j = 0; j < arraySize; j++)
  {
    Objects2[j].someOtherMemberFunction();
  }
}

私はこれをできる限り単純化し、できれば読みやすくしました。私の目標は、これらのオブジェクト「Objects2[arraySize]」に複数のクラスからアクセスできるようにすることですが、ポインターを機能させるのに苦労しています。当面はコードを単純化するために、ベクトルではなく固定の配列サイズを使用することを意図的に選択しました。

現在のところ、一度に 1 つのクラス (エラー、メインまたはクラス 1) のみがこれらのオブジェクトとその関数にアクセスできます。クラス 1 をクラス 2 の関数への「パススルー」として機能させることを検討しましたが、それはばかげているように感じます。もっとエレガントな方法はありますか?ポインタはありますか?

編集:明確にするために、オブジェクトが異なるクラス間でどのように共有されるかについて、私はしっかりと把握していません。私の目標は、これらの「Objects2[arraySize]」オブジェクトを多数作成し (それらの配列を作成することで達成)、いくつかの異なるクラスでそれらにアクセスすることです。参照渡しについて調査しましたが、このオブジェクトの配列ではうまくいきません。

4

2 に答える 2

0

より一般的なものを探している間、これは特定の答えかもしれませんが、単に配列を Class1 のメンバーとして含めて、このようなパブリック アクセスを提供することができます。

class Class1
{
  public:
    Class2 Objects2[arraySize];
    void parseFunction(several parameters);

  private:
    int otherVariables; 
};

メイン プログラムでは、Object1.Objects2 としてアクセスできます。インスタンスに関連付けたくない場合は、静的メンバーにすることができます。

ただし、実際のメンバーを非表示にして、アクセサー (get/set) を提供することをお勧めします。それはあなたがしようとしていることに依存します。

参照渡ししたい場合は、Class1 のメソッドを次のように変更できます。

void Class1::parseFunction(several parameters, Class2& Objects2[])

次に、それを main からパラメーターとして渡し、parseFunction メソッドで参照します。

もう 1 つの方法は、どこからでもアクセスできるようにするすべてのものを定義する「Globals.h」ファイルを含めることです。

于 2013-07-23T18:28:46.137 に答える