2014-03-05 62 views
0
友元函數向前聲明

我試圖定義一個類提取朋友的函數成員與類Descripteur,但我編譯時出現以下錯誤:C++爲鱗片狀類

*Descripteurs.h:24:57: error: invalid use of incomplete type ‘class Extraction’ friend

void Extraction::globalSet(Descripteurs document); Descripteurs.h:19:7: error: forward declaration of ‘class Extraction’ class Extraction;*

的代碼給出:

//in Extraction.h 
#include "Descripteurs.h" 
class Extraction { 
public: 
    Extraction(Descripteurs document); 
    void globalSet(Descripteurs document); 
protected: 
    int m_value; 
} 

// in Extraction.cpp  
#include "Extraction.h" 
Extraction::Extraction(Descripteurs document){ 
    this->globalSet(document); 
} 
void Extraction::globalSet(Descripteurs document){ 
    this->m_value = document.m_nbMot; //this is why I need a friend function 
    cout << this->m_value << endl; 
} 

//in Descripteur.h 
class Extraction; //forward declaration, is there a problem with this ? 
class Descripteurs { 
public: 
    friend void Extraction::globalSet(Descripteurs document); 
protected: 
    int m_value; 
}; 

我想麻煩來自一個事實,我的類鱗片狀,因爲提取使用描述符描述符必須知道交互處理好友功能。我認爲前向聲明是一種解決方案,正如how comeforwardc++ friend namespace中所解釋的,但我無法找到同時處理好友功能,分層文件和分隔文件的文檔。 ,如果我刪除「類提取;」我得到如預期的錯誤: 'Extraction'尚未聲明 friend void Extraction :: globalSet(Descripteurs document);

通過訪問器(獲取函數)的朋友函數是一個選擇:我不想讓屬性可以從任何地方訪問(在情況下函數應該採用幾個複雜的屬性,而不僅僅是一個int)。

任何人都可以告訴我,如果我需要添加一些代碼片段,或者如果沒有辦法不使用訪問器來做到這一點?

任何幫助將受到歡迎

感謝

亞歷克西斯

+0

恐怕我把它當作'醉酒班'來讀。 –

回答

0

不幸的是,你不能聲明前置聲明類的成員函數作爲friend。有關可能的解決方法,請參閱this question

+0

感謝您的鏈接,這正是我沒有找到的成功! 我將努力研究這些解決方案,試圖理解密鑰,但至少您給了我一個非常好的提示,再次感謝。 – alexis

+0

我的榮幸。最好的感謝你可以給我的是通過點擊旁邊的綠色複選標記來「接受」這個答案。 (當問人的問題,你決定哪個迴應值得標記爲'正確')。 – evadeflow

+0

我找到了綠色檢查,完成:) – alexis