【问题标题】:C++ friend function not workingC ++友元函数不起作用
【发布时间】:2013-07-20 14:53:00
【问题描述】:

我是 C++ 新手,我一直在尝试了解 C++ 中的类。最近我试用了这个程序,它没有返回整数 9,而是返回了一些垃圾值。有人可以帮帮我吗

#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
class abc;
class xyz
{
    int a;
public:
    friend int add(xyz, abc);
    friend void setval(xyz, int, abc, int);


};
class abc
{
    int b;
public:
    friend int add(xyz, abc);
    friend void setval(xyz, int, abc, int);
};

int add(xyz V1, abc V2)
{ return (V1.a + V2.b);}
void setval(xyz v1, int v11, abc v2, int v22)
{v1.a = v11; v2.b = v22; }

int main()
{
    xyz A;
    abc B;
    setval(A, 4, B, 5);
    cout<<add(A, B)<<endl;
    return(0);
}

【问题讨论】:

  • 看代码有点痛苦..为什么类名是xyz..abc...
  • @AnnieKim 我只是在尝试我正在学习的概念,所以只是一个随机代码,没有具体原因。
  • @Sankalp 感谢它解决问题的答案,我将进一步研究通过引用传递值。
  • 是的..我知道..这3个答案是相似的,你可以选择一个作为答案,如果你认为他们有帮助,可以投票给其他人..

标签: c++ class oop friend-function


【解决方案1】:

发生这种情况是因为您将参数按值传递给setval 函数,这将修改您传递的对象的副本。

请改用以下签名:

void setval(xyz& v1, int v11, abc& v2, int v22);

这样,您将发送对对象的引用,而不是在某些单独的内存块中创建的那些对象的副本。因此,在您的 main 函数中创建的对象将被分配值。

【讨论】:

    【解决方案2】:
    friend void setval(xyz, int, abc, int);
    

    您的 set 函数将值设置为传递对象的副本,而不是传递的对象。您需要通过引用传递。

    friend void setval(xyz &, int, abc &, int);
                       ^^^^^^      ^^^^^^ 
    

    我不妨建议从一本好书开始:
    The Definitive C++ Book Guide and List

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2018-08-11
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多