我試圖定義一個類提取朋友的函數成員與類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 comeforward或c++ friend namespace中所解釋的,但我無法找到同時處理好友功能,分層文件和分隔文件的文檔。 ,如果我刪除「類提取;」我得到如預期的錯誤: 'Extraction'尚未聲明 friend void Extraction :: globalSet(Descripteurs document);
通過訪問器(獲取函數)的朋友函數是一個選擇:我不想讓屬性可以從任何地方訪問(在情況下函數應該採用幾個複雜的屬性,而不僅僅是一個int)。
任何人都可以告訴我,如果我需要添加一些代碼片段,或者如果沒有辦法不使用訪問器來做到這一點?
任何幫助將受到歡迎
感謝
亞歷克西斯
恐怕我把它當作'醉酒班'來讀。 –