【问题标题】:c++ forward declaration for a friend function in imbricated classesc++ 叠层类中友元函数的前向声明
【发布时间】: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 comeforwardc++ friend namespace 中所解释的那样,但我找不到同时处理友元函数、叠瓦类和分隔文件的文档。 如果我删除“类提取;”我按预期得到以下错误: “提取”尚未声明 朋友 void Extraction::globalSet(Descripteurs document);

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

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

欢迎任何帮助

谢谢

亚历克西斯

【问题讨论】:

  • 恐怕我把它读作“醉酒的班级”。

标签: c++ friend forward-declaration


【解决方案1】:

很遗憾,您不能将前向声明类的成员函数声明为friend。请参阅this question 了解可能的解决方法。

【讨论】:

  • 感谢链接正是我没有成功寻找的!我将研究这些解决方案,尝试理解密钥,但至少你给了我一个非常好的提示,再次感谢。
  • 我的荣幸。您可以给我的最好的感谢是通过单击旁边的绿色复选标记来“接受”这个答案。 (作为提出问题的人,您决定哪个回答应该被标记为“正确”。)
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多