在叠瓦式类中的友元函数的c++正向声明

c++ forward declaration for a friend function in imbricated classes

本文关键字:c++ 函数 声明 友元      更新时间:2023-10-16

我正试图用类描述符定义提取FRIEND的函数成员,但在编译时,我得到了以下错误:

*描述符.h:24:57:错误:无效使用不完整类型的"类提取"朋友

void Extraction::globalSet(描述符文档);Descripteurs.h:19:7:错误:"类提取"的正向声明类提取;*

由代码给出:

//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;
};

我想问题来自于我的类是叠瓦的,因为Extraction使用Descripteurs,并且Description必须知道Exctract才能处理友元函数。我认为forward声明是一个解决方案,正如comeforward或c++friend命名空间中所解释的那样,但我找不到同时处理friend函数、叠瓦类和分离文件的文档。如果我删除了"类提取;",我会得到以下错误:尚未声明"Extraction"friend void Extraction::globalSet(描述符文档)

一种选择是友元函数而非访问器(get函数):我不想让属性从任何地方都可以访问(在这种情况下,函数应该具有几个复杂的属性,而不仅仅是一个int)。

有人能告诉我是否需要添加一些代码,或者如果不使用访问器就无法做到这一点吗?

欢迎任何帮助

感谢

Alexis

不幸的是,不能将前向声明类的成员函数声明为friend。有关可能的解决方法,请参阅此问题。