いつもお世話になっております。
安藤@名古屋市北区在住です。
[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
安藤@名古屋市北区在住です。
[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