无法使用带有参数的函数分隔类中的输入函数

时间:2019-04-23 09:28:21

标签: c++ constructor

在此问题中无法分离输入功能

在此代码中,我无法分离输入功能。但是,当我将输入放入int main()时,它显示正确的解决方案。我的代码有什么问题?

#include<iostream>
using namespace std;
class test
{
    int a,b;
    public:
    void input();
    void swapValue(int value1, int value2);
};
void test::input()
{
    cin>>a>>b;
}
void test::swapValue(int value1, int value2)
{
    cout << "Swap value in function" << endl;

    int temp = value1;
    value1   = value2;
    value2   = temp;
    cout << "value 1: " << value1 << endl;
    cout << "value 2: " << value2 << endl;
}
int main()
{
    int a,b;
    test s1;
    s1.input();
    cout << "===============================" << endl;
    cout << "After the function call" << endl;
    s1.swapValue(a, b);

    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:1)

void test::input()
{
    int a,b;   // these are local variables
    cin>>a>>b;
}

a中的局部变量binputinput函数的局部变量,一旦程序从该函数返回,它们就不再存在,尽管它们与a中的变量bmain具有相同的名称。

这是最基础的知识,将在编程教科书的第一章中进行解释。

您只需要删除input中的这一行:

void test::input()
{
    // delete this line:   int a,b;
    cin >> a >> b;
}

顺便说一句:swapValue的用途对我来说还不太清楚,但基本上您似乎混淆了类成员和局部变量。

答案 1 :(得分:1)

在此功能中:

void test::input()
{
    int a, b;
    cin >> a >> b;
}

您没有更改a的{​​{1}}和b成员字段。您正在创建新的testa变量,这些变量在函数结尾处被丢弃,而成员字段保持不变。删除b行以解决此问题。

另一个问题是您无法阅读int a, b;ab对它们没有任何作用,那么为什么它甚至是成员函数呢?您必须将对swapValuea的引用传递给b,但是它们是私有的,没有吸气剂,因此不起作用。我建议改成这样:

swapValue

并这样称呼它:

void test::swapValue()
{
    cout << "Swap value in function" << endl;
    int temp = a;
    a = b;
    b = temp;
    cout << "value 1: " << a << endl;
    cout << "value 2: " << b << endl;
}

现在,它是一个成员函数,它交换s1.swapValue(); a字段,因此,它不需要任何参数。