imcicated类中的友元函数的c ++前向声明

时间:2014-03-05 14:52:36

标签: c++ friend forward-declaration

我正在尝试使用类Descripteur 定义类提取 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;
};

我想麻烦来自于我的课程是叠加的,因为提取使用 Descripteurs Descripteurs 必须知道 Exctraction 处理好友功能。我认为前向声明是一个解决方案,如how comeforwardc++ friend namespace中所述,但我找不到同时处理友元函数,复杂类和分隔文件的文档。 如果我删除&#34;类提取;&#34;我按预期得到以下错误: 'Extraction'尚未宣布   friend void Extraction :: globalSet(Descripteurs document);

访问器(获取函数)上的友元函数是一种选择:我不想从任何地方访问属性(在这种情况下,函数应该采用几个复杂的属性,而不仅仅是一个int)。

是否有人可以告诉我是否需要添加一些代码或者如果没有使用访问器就无法执行此操作?

欢迎任何帮助

由于

亚历

1 个答案:

答案 0 :(得分:0)

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