你在使用之前必須聲明B::C
。以下可能工作。
更新:忽略的請求一個可用的演示,這裏是記住這個結構(減去的成員函數的定義),可以工作,但熊的一種方式,一切都是私人,因爲它主張。
class A;
class B
{
int geti(A * ap);
public:
class C
{
int geti(A * ap);
};
};
class A
{
friend class B; // fine
friend class B::C; // fine too
int i;
};
然後別處定義getter函數:
int B::geti(A * ap) { ... }
int B::C::geti(A * ap) { ... }
備選:正向聲明嵌套類B::C
和保存一個外部定義:在
class A;
class B
{
int geti(const A * ap) const; // we cannot use A yet!
public:
class C;
};
class A
{
friend class B; // fine
friend class B::C; // fine too
int i;
};
int B::geti(const A * ap) const { return ap->i; }
class B::C
{
inline int geti(const A * ap) const { return ap->i; }
};
很多基本的錯誤的你的代碼,請首先解決這些問題:沒有「B :: C :: geta()」,「A :: i」是私人的。 「B :: C :: geti()」是私有的。 – 2011-06-15 13:48:09
只需忽略主要功能。 – dave 2011-06-15 13:50:12
「只是忽略主要功能。」難以置信。當你告訴鏈接器時它有用嗎? – 2011-06-15 13:53:30