いつもお世話になっております。
安藤@名古屋市北区在住です。

[vcpp 00053386] 自己参照するmapについてにおいてyoshinoさん曰

> こんにちは、よしのです。

> 次のようなクラスを宣言したところ、
> E:\Program Files\DevStudio\VC\INCLUDE\utility(19) : error
> C2079: 'second' が 未定義の class 'Foo' で使用されています。
> とコンパイルエラーになってしまいました。

> map<string,Foo>ではなくmap<string,Foo*>にするとコンパイルが
> とおるのですがポインタではなく実現したいのです。が、どうした
> ら解決できるのかがわかりません。

> そもそもこのような構成はできないのでしょうか?
> アドバイスをよろしくお願い致します。


こんなのはどうでしょう?


#include <map>
#include <string>

using namespace std;

class FooMap;

class Foo {
private:
  FooMap* m_pFooMap;
public:
  Foo();
  ~Foo();
};

class FooMap {
public:
  map<string,Foo> m_map;
};


Foo::Foo()
{
  m_pFooMap = new FooMap();
}

Foo::~Foo()
{
  delete m_pFooMap;
}

void main (void) {
  Foo foo;
}


まじめな突っ込みはしないでね。

---------------------------------------------------------
Toshihiko 'Chin' Ando
mail : a...@ngy.3web.ne.jp