C++ 无法使用友元运算符赋值和私有变量

C++ 无法使用友元运算符赋值和私有变量,c++,C++,我试图在我的代码中使用“sum+=A”,我正在学习编写运算符,但主要处理左侧的对象,因此由于sum是双精度类型,我不确定如何对运算符进行编码,以便将sum的值与bank对象中的余额变量相加,并在运算符中返回sum 大体上我有 double sum = 0; Bank A("Tom", 500.50); Bank B("Sam", 123.45); sum += A; sum += B; cout << sum << endl; 我在没有朋友的情况下尝试过使用它,但我不确

我试图在我的代码中使用“sum+=A”,我正在学习编写运算符,但主要处理左侧的对象,因此由于sum是双精度类型,我不确定如何对运算符进行编码,以便将sum的值与bank对象中的余额变量相加,并在运算符中返回sum

大体上我有

double sum = 0;
Bank A("Tom", 500.50);
Bank B("Sam", 123.45);
sum += A;
sum += B;
cout << sum << endl;

我在没有朋友的情况下尝试过使用它,但我不确定在使用赋值运算符时使用双精度值的正确语法。任何帮助都将不胜感激。

您有几个问题

首先-您的
朋友
声明和方法定义不匹配(您遗漏了一个
常量
)。这意味着方法定义不是朋友

其次,
+=
运算符需要将其第一个参数作为参考,以便可以更新它。它还应该返回一个引用

所以你应该以

    ...
    friend double & operator+=(double &, const Bank&);
};

double & operator+=(double &a, const Bank& rhs) {
    a += rhs.balance;
    return a;
}

运算符+=
的实现中,您正在更改变量的本地副本。它不会更改调用函数中的变量。您需要使用:

double& operator+=(double& a, const Bank& rhs) {
   a += rhs.balance;
   return a;
}
此外,您需要在
Bank
中提供一个构造函数,以便能够构造类的实例,例如:

Bank(char const* n, double b) : balance(b)
{
   std::strcpy(name, n);
}

你有什么问题?如果您遇到构建错误,请将其包括在内(完整且未编辑)。如果您得到意外结果,请显示输入、实际输出和预期输出。请编辑您的问题以包含这些信息。我的代码没有使用&between double And运算符,如果您不介意的话,您可以解释一下这会给程序增加什么吗?它只会在您使用返回值时使用,比如
sum2=sum+=A
,或者可能是
cout
Bank(char const* n, double b) : balance(b)
{
   std::strcpy(name, n);
}