1

プロジェクトの場合、コンテナー クラスと要素を作成する必要があります。要素には、コンテナーに関する知識が必要です。また、コンテナー内のファクトリ メソッドによって作成を行う必要があります。これは、ヘッダーとcpp ファイルの場合、(私のように) ヘッダーを 1 つしか使用できない場合、私には不可能に思えます。問題の例を次に示します。

class myContainer;
class myElement;

class myContainer
{
  public:
    myElement *createElement()
    {
      myElement *me =new myElement(this); 
      // do some adding to list stuff
      return me;
    }

    int askMyContainer()
    {
       return 42;
    }
};

class myElement
{
  public:
    myElement(myContainer *parent)
    {
     pcontainer=parent;
    }

    int userAskingSomething()
    {
     return pcontainer->askMyContainer();
    }
 protected:
  myContainer *pcontainer;
};

クラス myContainer には myElement に関する知識が必要です。そのため、myElement ハットは myContainer の前にある必要がありますが、myElement には myContainer に関する知識が必要です。

4

3 に答える 3

2

追加のファイルを使用して宣言と定義を分割し、円を解決することができます。

// File myContainer.h:

#include "myElement.h"

class myContainer
{
    public:
    myElement *createElement();
    int askMyContainer();
};
#include "myElement.hcc"


// File myContainer.hcc:

#include "myElement.h"

// inline myContainer functions


// File myElement.h

class myContainer;
class myElement
{
    public:
    myElement(myContainer *parent);
    int userAskingSomething();
    protected:
    myContainer *pcontainer;
};
#include "myElement.hcc"


// File myElement.hcc

#include "myContainer.h"

// inline myElement functions
于 2013-10-28T10:24:34.727 に答える