我需要編譯這樣的東西:
struct Base {
virtual void func1()=0;
// ...
friend void Derived::func2(Base *base);
private:
int some_private;
}
struct Derived : Base {
virtual func3()=0;
// ...
void func2(Base *child) {
std::cout << child->some_private;
}
};
但我不斷收到編譯錯誤。我嘗試交換結構或先宣告它們,但我不能先宣告 Derived(因為繼承),也不能先宣告 Base(因為我需要在 Derived 中宣告友元函式)。該怎么辦?
uj5u.com熱心網友回復:
您有一些基本的解決方案。最明顯的是從私有變為受保護。在 C 中,protected 意味著子類可以訪問。
您可以添加更多公共(可能受保護)訪問器方法。
您可以前向參考整個派生類并將整個類添加為好友。
就我個人而言,我從來沒有覺得需要使用友元方法或類,而且我不知道在什么情況下我必須在我不會依賴其他方法來完成我想要完成的任何事情之前。
對于這個特定的解決方案,我會將訪問權限更改為 protected。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/369634.html
