在此问题中无法分离输入功能
在此代码中,我无法分离输入功能。但是,当我将输入放入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;
}
答案 0 :(得分:1)
void test::input()
{
int a,b; // these are local variables
cin>>a>>b;
}
a
中的局部变量b
和input
是input
函数的局部变量,一旦程序从该函数返回,它们就不再存在,尽管它们与a
中的变量b
和main
具有相同的名称。
这是最基础的知识,将在编程教科书的第一章中进行解释。
您只需要删除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
成员字段。您正在创建新的test
和a
变量,这些变量在函数结尾处被丢弃,而成员字段保持不变。删除b
行以解决此问题。
另一个问题是您无法阅读int a, b;
和a
。 b
对它们没有任何作用,那么为什么它甚至是成员函数呢?您必须将对swapValue
和a
的引用传递给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
字段,因此,它不需要任何参数。