错误:无法将`void(*)()'转换为`float'

时间:2013-11-04 23:34:45

标签: c++ function compiler-errors syntax-error

我在将void (*)()转换为float时遇到问题。这是我的代码:

#include <iostream>

using namespace std;

void instructions();
void numDays();
void med();
void sur();
void lab();
float room(int days);
float misc(float meds, float surgical, float lab);
float total(float room, float misc);

int main()
{
  int days;
  float meds;
  float surgical;
  instructions();
  numDays();
  med();
  sur();
  lab();
  room( days);
  misc(meds, surgical, lab);
  total( room, misc);
}

void instructions()
{
  cout<<"this program will ask you some questions. After that it will print out all of the users charges and the tital\
 amount that is owed. "<<endl;
}

void numDays()
{
  float days;
  cout<<"Enter in users length of stay. "<<endl;
  cin>> days;
}

void med()
{
  float meds;
  cout<<"Enter int the users medication charges. "<<endl;
  cin>> meds;
}

void sur()
{
  float surgical;
  cout<<"Enter in the users surgical charges. "<<endl;
  cin>> surgical;
}

void lab()
{
  float lab;
  cout<<"Enter in the users lab fees. "<<endl;
  cin>> lab;
}

float room(float days)
{
  float room;

 room = (days*450);

}

float misc(float meds, float surgical, float lab)
{
  float misc;
  misc = (meds + surgical + lab);
  return 0;
}

float total(float room, float misc)
{
 float total;
 total = (room + misc);
  return total;
}

这些是我不断收到的错误消息:

:24: error: cannot convert 'void (*)()' to 'float' for argument `3' to `float misc(float, float, float)'
:25: error: cannot convert 'float (*)(int)' to 'float' for argument `1' to `float total(float, float)'

3 个答案:

答案 0 :(得分:3)

例如在本声明中

misc(meds, surgical, lab);

参数lab是一个函数指针。我没有查看你的代码,但也许你的意思是

misc(meds, surgical, lab());

但即使在这种情况下,您也会收到错误,因为函数实验室的返回类型为void。 你似乎不明白自己在做什么。

答案 1 :(得分:2)

  1. room()函数中,我假设您忘记了return语句。

  2. total(room, misc); - 所以,我想您希望得到roommisc函数的结果。如果你这样做,这将有效。

    float misc = misc(meds, surgical, lab);
    float room = room(days);
    float total = total(room, misc);
    
  3. 你所拥有的虚空功能没有达到预期的效果。您在这些函数中创建了 local 变量,它们与main中的变量不同。您可以使这些函数返回输入的结果,然后执行float lab = lab()

  4. 您的misc函数始终返回0 - 我相信这不是您所期望的。

  5. 一般来说,如果你有函数返回的东西将它分配给一个变量,如2中所示。 - 否则它将不会做任何有用的事情,你将无法重复使用它。

    < / LI>

答案 2 :(得分:2)

好的,让我们从头开始吧。像你的例子这样的计算机程序包含两个不同的东西:

  1. 功能:它们处于活动状态,当它们被调用时它们
  2. 变量:它们是被动的,它们自己无法做某事
  3. 在你的程序中,你有两个不同的东西(一个变量和一个函数),它们都被称为med。这将导致混乱。因此,典型的样式指南建议函数名称在其名称中包含动词,例如read_med,因此您知道函数应该执行的操作。另一方面,变量名通常是名词,例如meddaystotal

    该功能如下所示:

    float read_med() { // this is a function (active part)
      float med; // and this is a variable (passive part)
      cout << "Enter the medication amount: ";
      cin >> med;
      return med;
    }
    

    然后您可以像这样调用此函数:

    float med = read_med(); // the round parentheses mean “call the function, run the code”
    float days = read_days();
    
    float total = med * days;
    cout << "Total: " << total << endl;