我正在编写一个计划,根据婚姻状况,14岁以下儿童的数量,工资总额和养老基金缴纳的工资总额百分比来计算税收。一切似乎都是正确的,但在我的职能taxAmount中无法看到婚姻状况,子女数,工资总额和养老基金百分比。我认为使用&符号(&)会使我的其他函数可以查看这些值。我不能改变我的功能数量,我必须坚持我目前正在使用的两个功能。有没有人有关于如何解决我的问题的建议?错误消息表明,婚姻,子女,总薪酬和养老金未在范围内宣布。
原型是:
void getData(char&, int&, int&, int&);
int taxAmount(int);
我的主要职能:
int main()
{
char marital;
int children;
int grossSalary;
int pension;
int amount;
getData(marital, children, grossSalary, pension);
cout << "The tax amount is: $" << taxAmount(amount) << endl;
_getch();
return 0;
}
我获取数据的功能:
void getData(char& marital, int& children, int& grossSalary, int& pension)
{
cout << "Enter your marital status. Enter 'm' for married. Enter 's' for";
cout << " single. \n";
cin >> marital;
cout << endl;
cout << "Enter the number of children you have under the age of 14. \n";
cin >> children;
cout << endl;
cout << "Enter your gross salary. If you are married, enter the combined";
cout << " income of you and your spouse.";
cin >> grossSalary;
cout << endl;
cout << "Enter the number of the percentage (up to 6) of your gross";
cout << " income contributed to a pension fund.";
cin >> pension;
cout << endl;
}
我计算金额的函数(删除的代码):
int taxAmount(int amount)
{
...
}
答案 0 :(得分:0)
如果您可以将taxAmount
的功能签名更改为:
int taxAmount(int amount, char marital, int children, int grossSalary, int pension)
那么这将是将参数输入函数的最佳方法;或者为了保存输入,可以创建一个包含所有4个值的类,并只传递一个对类的常量引用:
struct TaxRecord {
char marital;
int children;
int grossSalary;
int pension;
};
...
int taxAmount(int amount, const TaxRecord &record);
另一方面,如果你也不能改变功能签名,那么我建议你制作4值的文件范围而不是main
函数的功能范围:
static char marital;
static int children;
static int grossSalary;
static int pension;
int main(int argc, char *argv[]) {
// ...
}
你需要在C ++中使用static关键字,否则你的变量默认为外部;如果您在C中,则可以删除static关键字,因为这是默认值(尽管请参阅下面的@ wallyk注释)。
这假设main
和taxAmount
在同一.c
/ .cpp
文件中定义。如果没有,你会做这样的事情:
tax.hpp:
extern char marital;
extern int children;
extern int grossSalary;
extern int pension;
和tax.cpp,只有tax.cpp:
#include "tax.hpp"
char marital;
int children;
int grossSalary;
int pension;
这样每个翻译单元(cpp
文件)都可以访问这4个变量。但是将它们保持在文件范围内是静态的,因为名称不会污染整个可执行文件,只会污染一个文件。