Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:无法转换'double()(double)throw()';至`双倍';委派_C++ - Fatal编程技术网

C++ 错误:无法转换'double()(double)throw()';至`双倍';委派

C++ 错误:无法转换'double()(double)throw()';至`双倍';委派,c++,C++,我不明白为什么会有这些错误消息。我对C++是全新的。 payroll.cpp: In function `void fGross()': payroll.cpp:57: error: assignment of function `double round(double)' payroll.cpp:57: error: cannot convert `double' to `double ()(double) throw ()' in assignment payroll.cpp:59: err

我不明白为什么会有这些错误消息。我对C++是全新的。
payroll.cpp: In function `void fGross()':
payroll.cpp:57: error: assignment of function `double round(double)'
payroll.cpp:57: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:59: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fSoc()':
payroll.cpp:65: error: assignment of function `double round(double)'
payroll.cpp:65: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:67: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fFed()':
payroll.cpp:73: error: assignment of function `double round(double)'
payroll.cpp:73: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:75: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fSt()':
payroll.cpp:82: error: assignment of function `double round(double)'
payroll.cpp:82: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:84: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fround()':
payroll.cpp:110: error: invalid operands of types `double ()(double)
throw ()' and `double' to binary `operator+'
这是我的代码:

#include <iostream>
#include <climits>
#include <cmath>

using namespace std;

    double hours, gross, socSec, fedTax, stTax, ins, net;
    double const rate = 16.78;
    double unin = 10.00;
    char d = '$';
    void fGross();
    void fSoc();
    void fFed();
    void fSt();
    void fUnin();
    void fIns();
    void fNet();
    void fround();


int main (void)
{
        cout <<"\n\n\t\tWelcome to the Payroll Program!!!\n\n\n"; 

        cout <<"How many hours did you work this week?\t";
        cin >> hours;
        cout <<"How many children do you have?";
        cin >> ins;

        fGross();
        fSoc();
        fFed();
        fSt();
        fUnin();
        fNet (); 

        cout <<"Payroll Stub:\n\n\t"
             <<"Hours:\t" << hours
             <<"\n\tRate:\t" << rate <<"16.78 $/hr\n\t"
             <<"Gross:\t" << d << gross
             <<"\n\n\tSocSec:\t" << d << socSec
             <<"\n\tFedTax:\t" << d << fedTax
             <<"\n\tStTax:\t" << d << stTax
             <<"\n\tUnion:\t" << d << unin;

        fIns();

        cout <<"\n\tNet:\t" << net <<"\n\nThank you for using the PP!!"
             <<"\n\nEndeavor to have a StarTrek-esque day!";

        return 0;
}    


void fGross()
{
    round = rate * hours;
    fround();
    gross = round;
    return;
}

void fSoc()
{
    round = gross * .06;
    fround();
    socSec = round;
    return;
}

void fFed()
{
    round = gross * .14;
    fround();
    fedTax = round;
    return;

}

void fSt()
{
    round = gross * .05;
    fround();
    stTax = round;
    return;
}

void fIns()
{
    if (ins >= 3)
    {
        ins = 35.00;
        cout << "\n\tIns:\t" << d << ins;
    }
    else
    {
        ins = 0.00;
    }
    return;
}

void fNet()
{
    net = gross - socSec - fedTax - stTax - unin - ins;
    return;
}

void fround()
{
    round = floor((round + .05) * 100);
    return;  
}
#包括
#包括
#包括
使用名称空间std;
双倍小时、总、socSec、fedTax、stTax、ins、净额;
双常数率=16.78;
双unin=10.00;
字符d=“$”;
void fGross();
void fSoc();
void fFed();
void fSt();
void fUnin();
空心翅片();
void fNet();
void fround();
内部主(空)
{

cout有一个名为的标准库函数,在
中声明。您的代码需要一个名为
round
的全局变量,您似乎忘记了声明该变量,因此
fGross
中的
round
fSoc
等的所有用法都解析为该函数。您不能为函数名分配任何内容,而且,您不能将指向函数的指针(这是您在赋值的右侧使用函数名时得到的指针)赋给浮点变量,因此会出现所有令人困惑的错误

为了使程序正常工作,您需要更改变量的名称
round
;如果您只是添加缺少的声明,您将得到另一个错误

test.cc:10:12: error: ‘double round’ redeclared as different kind of symbol
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:326:1: note:
    previous declaration ‘double round(double)’
…这至少给了你更多关于问题所在的线索

这段代码还有很多其他问题,我只想指出其中最重要的三个:

  • 所有的
    f
    -函数都应该带参数并返回一个值;所有的全局变量都应该被删除。(我怀疑这是对一些COBOL的直译,所以希望这是您计划进行的下一次重构,但无论如何我必须指出。)
  • 对货币的计算必须使用算术来避免舍入和下溢问题;最简单的事情,对于这种程序来说已经足够好了,就是将所有东西都缩放到整数分,然后使用
    int64\t
    变量;在涉及多年复利或类似情况的计算中,您可以也许你会想扩大到100分之一或1000分之一
  • 使用名称空间std
    是一种不好的做法,会导致更多您遇到的类型的问题。为您实际需要的每个foo编写
    使用std::foo;

你应该使用更好的名称。没有人知道
fSt
fNet
应该是什么意思,可能在一个月左右甚至你都不记得了。例如,当调用函数
calculateNet
时,函数的作用显而易见