不能存储任何值

Can not store any value

我最近开始学习 C++,做了一些简单的 class/friend 函数练习,我想做的是,通过使用友元函数从用户那里为 class 的 2 个对象获取 2 个数字只有这样才能再次仅使用朋友功能,将这 2 个数字相乘并显示在屏幕上。假设我按顺序输入了 2、3、4、5。预期输出为 6 和 20,但我在屏幕上只能看到 0 和 0。

#include<iostream>
using namespace std;

class iluvcpp {
    int no_1, no_2;
public:
    iluvcpp(){}
    ~iluvcpp(){}
    friend void inputno(iluvcpp obj);
    friend int multiply(iluvcpp obj);
}multi_1, multi_2;

void inputno(iluvcpp obj) {

    cout <<"Enter no 1: ";
    cin >> obj.no_1;
    cout <<"Enter no 2: ";
    cin >> obj.no_2;
}
int multiply(iluvcpp obj) {
    return ((obj.no_2)*(obj.no_1));
}

int main() {
    inputno(multi_1);
    inputno(multi_2);   
    cout << multiply(multi_1) <<"   "<< multiply(multi_2);

    cout << endl;
    system("pause");
    return 0;
}

您按值传递对象,这意味着当您调用 inputno 时您正在处理一个副本。尝试将函数签名更改为:

void inputno(iluvcpp& obj) {
  ...
}

Here's an explanation 以及有关按值传递参数与按引用传递参数的示例。

2条建议:

class 的 variable/method 默认是私有的。也可以使您的变量 no_1 和 no_2 public,或者写一个 setter,如果您熟悉的话。要让它们默认为 public,请使用 struct,而不是 class.

正如其他人已经指出的那样,您没有直接修改 multi_1 和 multi_2。要么让它们通过引用传递(orip 的答案恰好提到了这一点),要么使它们成为 return 这个 iluvcpp obj 对象并像这样称呼它们:

multi_1 = inputno(multi_1);

void inputno(iluvcpp obj) 有一个名为 obj 的参数,没有 return 值。这是错误的方式,inputno 不需要 main 的任何东西,但它应该 return 一些东西:

iluvcpp inputno(void) { ... 或(等价)iluvcpp inputno() { ....

最后需要一个 return something; 语句,这样 C++ 就知道 inputno 到 return 的值是什么。