3 回答

TA貢獻1848條經驗 獲得超6個贊
這根本不可能。您不能在容器外部轉發聲明嵌套結構。您只能在容器內轉發聲明。
您需要執行以下任一操作
將課程設為非嵌套
更改聲明順序,以便首先完全定義嵌套類
創建一個既可以在函數中使用又可以由嵌套類實現的公共基類。

TA貢獻1812條經驗 獲得超5個贊
我不相信向前不完整的類作品聲明內部類的(因為沒有類定義,沒有辦法知道是否有實際的方式是一個內部類)。因此,您必須包含Container的定義,以及一個前向聲明的內部類:
class Container {
public:
class Iterator;
};
然后在單獨的標頭中實現Container :: Iterator:
class Container::Iterator {
};
然后#僅包含容器標頭(或不必擔心前向聲明,只需將兩者都包含在內)

TA貢獻1966條經驗 獲得超4個贊
我不知道完全按照自己的意愿進行操作,但是,如果您愿意使用模板,則可以采用以下解決方法:
// Foo.h
struct Foo
{
export template<class T> void Read(T it);
};
// Foo.cpp
#include "Foo.h"
#include "Container.h"
/*
struct Container
{
struct Inner { };
};
*/
export template<>
void Foo::Read<Container::Inner>(Container::Inner& it)
{
}
#include "Foo.h"
int main()
{
Foo f;
Container::Inner i;
f.Read(i); // ok
f.Read(3); // error
}
希望該慣用法可能對您有所幫助(并希望您的編譯器基于EDG并實現export;))。
- 3 回答
- 0 關注
- 441 瀏覽
添加回答
舉報