2

これが状況です。

//foo.h
struct A1{ 
 struct A2{};
};

//bar.h
#include "MyString.h"
class A2; //note, not including foo.h
TEMPLATE_INSTIANTIATE_MAP_OF_TYPE(String,A2*); //assume compiler doesn't do this

上記の状況を機能させることは可能ですか?を作成しようとしましたMyMap<String,A1::A2*> m;が、コンパイラは未定義の参照エラーをスローします。bar.h import foo.h なしで上記の作業を行うことは可能ですか?

4

2 に答える 2

2

悲しいことに、そうではありません。ネストされたクラスは、クラス定義内でのみ宣言できます。

于 2012-04-10T14:56:31.120 に答える
0

クラス定義の外でネストされたクラスを宣言する方法を次に示します。class Logic は外部クラスです。LogicImp は前方宣言された構造体です。

class Logic
{
public:

    Logic();
    ~Logic();

private:
    struct LogicImp;
    std::unique_ptr<LogicImp> limp_;
};

struct Logic::LogicImp
{
    int nLogical_;
};

Logic::Logic():limp_(new LogicImp())
{
}

Logic::~Logic()
{
}
于 2012-04-10T15:13:41.230 に答える