C++ 税务计算器C++;

C++ 税务计算器C++;,c++,C++,我正在写一个程序,根据婚姻状况、14岁以下儿童的数量、总工资以及养老基金总工资的百分比来计算税收。一切似乎都是正确的,但婚姻状况、子女数量、工资总额和养老基金比例都无法在我的功能税金额中看到。我认为使用符号(&)可以让我的另一个函数查看这些值。我不能改变我拥有的函数的数量,我必须坚持使用我目前正在使用的两个函数。有人对我如何解决我的问题有什么建议吗?错误消息说,婚姻、子女、Grossalary和养老金不在范围内 原型是: void getData(char&, int&, int

我正在写一个程序,根据婚姻状况、14岁以下儿童的数量、总工资以及养老基金总工资的百分比来计算税收。一切似乎都是正确的,但婚姻状况、子女数量、工资总额和养老基金比例都无法在我的功能税金额中看到。我认为使用符号(&)可以让我的另一个函数查看这些值。我不能改变我拥有的函数的数量,我必须坚持使用我目前正在使用的两个函数。有人对我如何解决我的问题有什么建议吗?错误消息说,婚姻、子女、Grossalary和养老金不在范围内

原型是:

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;
}
static char marital;
static int children;
static int grossSalary;
static int pension;

int main(int argc, char *argv[]) {
    // ...
}

如果您可以将
taxAmount
的函数签名更改为:

int taxAmount(int amount, char marital, int children, int grossSalary, int pension)
那么这将是将参数引入函数的最佳方式;或者,若要保存键入,请使用所有4个值创建一个类,并只需传入对类的常量引用:

struct TaxRecord {
    char marital;
    int children;
    int grossSalary;
    int pension;
};

另一方面,如果您也无法更改函数签名,那么我建议您将4值文件范围设置为
main
函数的功能范围:

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;
}
static char marital;
static int children;
static int grossSalary;
static int pension;

int main(int argc, char *argv[]) {
    // ...
}

在C++中需要静态关键字,否则变量将默认为外部;如果您使用的是C语言,您可以删除static关键字,因为这是默认值(尽管请参见下面的@wallyk注释)

这假设
main
taxantium
在同一
.c
/
.cpp
文件中定义。如果没有,您可以这样做:

tax.hpp:

extern char marital;
extern int children;
extern int grossSalary;
extern int pension;
在tax.cpp和only tax.cpp中:

#include "tax.hpp"

char marital;
int children;
int grossSalary;
int pension;

这样,每个翻译单元(
cpp
文件)都可以访问这4个变量。但是将它们保持在文件范围内的静态要干净得多,因为名称不会污染整个可执行文件,只污染一个文件。

虽然您没有显示
taxantium()
的代码,但我的钱在那里引用的
婚姻
子女
格罗萨拉里
养老金
值上。它们不在该函数的作用域内。我看不出您描述的错误的原因。当我编译这段代码时,上次我在一个问题上发布了完整的代码,有人告诉我不要发布太多不必要的内容,所以我删除了它。你们想让我发布我的完整程序吗?具体哪一行生成了错误消息?此外,您可能被告知不要发布这么多代码,但您仍然必须包含相关代码。发布代码的相关部分与转储所有代码是不同的。我真的不明白这是如何工作的。查看代码,您可以毫无问题地将输入返回到
main
,但随后调用
taxantium
,将未初始化的
int
传递给它,忽略您收到的所有输入。我怀疑你没有在这里显示完整的代码。请在C中的模块范围内设置一个
static
,它不会改变存储类,但会改变函数和变量的可见性(公开性)<代码>静态隐藏它们。没有
static
将它们公开。static意味着变量在文件范围内被隔离。如果taxAmount与main定义在同一个文件中,那么静态是可以的,但是如果taxAmount是不同的文件,那么是的,您需要外部链接,在这种情况下需要共享头。言下之意是这都是一个文件。如果不是,则在标头中将变量声明为extern,并在main.cpp中定义它们。所以@wallyk,我相信我们在上面说了同样的话。
#include "tax.hpp"

char marital;
int children;
int grossSalary;
int pension;