【发布时间】:2014-04-07 17:08:48
【问题描述】:
我正在尝试使用 class Descripteur 定义 class Extraction FRIEND 的函数成员,但是当我编译时出现以下错误:
*Descripteurs.h:24:57: 错误:无效使用不完整类型的“类提取”朋友
void Extraction::globalSet(Descripteurs 文档); 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 并且 Descripteurs 必须知道 Exctraction 处理好友功能。我认为前向声明是一种解决方案,正如how comeforward 或c++ friend namespace 中所解释的那样,但我找不到同时处理友元函数、叠瓦类和分隔文件的文档。 如果我删除“类提取;”我按预期得到以下错误: “提取”尚未声明 朋友 void Extraction::globalSet(Descripteurs document);
访问器(获取函数)上的朋友函数是一种选择:我不想让属性可以从任何地方访问(在这种情况下,函数应该采用几个复杂的属性,而不仅仅是一个 int)。
谁能告诉我是否需要添加一些代码,或者如果不使用访问器就无法做到这一点?
欢迎任何帮助
谢谢
亚历克西斯
【问题讨论】:
-
恐怕我把它读作“醉酒的班级”。
标签: c++ friend forward-declaration