不明白为什么友元函数不起作用
创始人
2024-12-26 22:00:16
0

友元函数是一种在类外部定义的函数,可以访问类的私有成员。如果友元函数不起作用,可能是以下几个原因:

  1. 友元函数的声明和定义不匹配:友元函数的声明要在类的内部进行,而定义要在类的外部进行。请确保友元函数的声明和定义完全一致。
class MyClass {
private:
  int privateData;

public:
  friend void friendFunction(MyClass obj); // 在类内声明友元函数
};

void friendFunction(MyClass obj) {
  obj.privateData = 10; // 在类外使用私有成员
}
  1. 友元函数的参数不正确:如果友元函数需要访问类的私有成员,通常需要将类的对象作为参数传递给友元函数。请确保友元函数的参数正确传递。
class MyClass {
private:
  int privateData;

public:
  friend void friendFunction(MyClass obj); // 声明友元函数

  void setPrivateData(int data) {
    privateData = data;
  }
};

void friendFunction(MyClass obj) {
  int data = obj.privateData; // 访问私有成员
  std::cout << data << std::endl;
}

int main() {
  MyClass obj;
  obj.setPrivateData(10);
  friendFunction(obj); // 传递类的对象给友元函数
  return 0;
}
  1. 类的访问权限不正确:如果类的访问权限是私有(private)或受保护(protected),则友元函数无法直接访问类的私有成员。请将类的访问权限设置为公有(public)。
class MyClass {
private:
  int privateData;

public:
  friend void friendFunction(MyClass obj); // 声明友元函数

  void setPrivateData(int data) {
    privateData = data;
  }
};

void friendFunction(MyClass obj) {
  int data = obj.privateData; // 错误!无法访问私有成员
  std::cout << data << std::endl;
}

请根据具体情况检查以上几个原因,确保友元函数的声明和定义正确,并传递正确的参数。

相关内容

热门资讯

实测揭晓!微扑克职业代打,微扑... 实测揭晓!微扑克职业代打,微扑克有挂么(微扑克)切实存在有挂(有挂解惑)-哔哩哔哩;1、许多玩家不知...
研究成果!微扑克辅助软件,微扑... 研究成果!微扑克辅助软件,微扑克有挂么(微扑克)本来存在有挂(有挂实锤)-哔哩哔哩微扑克辅助软件软件...
终于清楚!微扑克辅助挂,微扑克... 终于清楚!微扑克辅助挂,微扑克如何让系统发好牌(微扑克)确实是有挂(有挂秘籍)-哔哩哔哩1、微扑克如...
重大通报!微扑克ai辅助工具,... 重大通报!微扑克ai辅助工具,微扑克透牌(微扑克)切实有挂(有挂猫腻)-哔哩哔哩进入游戏-大厅左侧-...
普及知识!微扑克有ai吗,微扑... 普及知识!微扑克有ai吗,微扑克如何让系统发好牌(微扑克)本来有挂(存在有挂)-哔哩哔哩1、上手简单...
一分钟教会你!微扑克有挂么,微... 一分钟教会你!微扑克有挂么,微扑克ai机器人(微扑克)好像是真的有挂(真的有挂)-哔哩哔哩1、微扑克...
玩家实测!微扑克辅助工具,微扑... 玩家实测!微扑克辅助工具,微扑克如何让系统发好牌(微扑克)真是存在有挂(详细教程)-哔哩哔哩1、全新...
玩家必看科普!微扑克辅助提高胜... 玩家必看科普!微扑克辅助提高胜率,微扑克透牌(微扑克)原来有挂(有挂神器)-哔哩哔哩微扑克辅助提高胜...
查到实测辅助!微扑克辅助工具怎... 查到实测辅助!微扑克辅助工具怎么下载,微扑克有挂么(微扑克)确实有挂(有挂猫腻)-哔哩哔哩;1、微扑...
最新研发!微扑克有挂么,微扑克... 最新研发!微扑克有挂么,微扑克有挂么(微扑克)果然存在有挂(真的有挂)-哔哩哔哩1)微扑克有挂么辅助...