“不能用作函数错误”

时间:2010-12-10 19:39:00

标签: c++ function

我正在编写一个使用不同.cpp文件中的函数的简单程序。我的所有原型都包含在头文件中。我将一些函数传递给其他函数,我不确定我是否正确执行。我得到的错误是“'functionname'不能用作函数”。它说不能使用的功能是growthRate函数和estimatedPopulation函数。数据通过输入函数(我认为它正在工作)进入。

谢谢!

标题文件:

#ifndef header_h
#define header_h

#include <iostream>
#include <iomanip>
#include <cstdlib>


using namespace std;

//prototypes
void extern input(int&, float&, float&, int&);
float extern growthRate (float, float);
int extern estimatedPopulation (int, float);
void extern output (int);
void extern myLabel(const char *, const char *);

#endif

growthRate功能:

 #include "header.h"

float growthRate (float birthRate, float deathRate, float growthrt)     
{    
    growthrt = ((birthRate) - (deathRate))
    return growthrt;   
}

估计人口功能:

    #include "header.h"

int estimatedPopulation (int currentPopulation, float growthrt)
{
    return ((currentPopulation) + (currentPopulation) * (growthrt / 100);
}

主要

#include "header.h"

int main ()
{
    float birthRate, deathRate, growthRate;
    char response; 
    int currentPopulation, years, estimatedPopulation;

    do //main loop
    {  
        input (currentPopulation, birthRate, deathRate, years);
        growthRate (birthRate, deathRate, growthrt);

        estimatedPopulation (currentPopulation, growthrt);
        output (estimatedPopulation (currentPopulation, growthrt));
        cout << "\n Would you like another population estimation? (y,n) ";
        cin >> response;
    }          
    while (response == 'Y' || response == 'y');

    myLabel ("5-19", "12/09/2010");   

    system ("Pause");

    return 0;
}    

6 个答案:

答案 0 :(得分:37)

您使用growRate作为变量名称和函数名称。该变量隐藏了该函数,然后您尝试使用该变量,就好像它是函数一样 - 这是无效的。

重命名本地变量。

答案 1 :(得分:1)

#include "header.h"

int estimatedPopulation (int currentPopulation, float growthRate)
{
    return currentPopulation + currentPopulation * growthRate  / 100;
}

答案 2 :(得分:0)

你的编译器是对的。您不能将在main中声明的growRate变量用作函数。

也许您应该为变量选择不同的名称,以便它们不会覆盖函数名称?

答案 3 :(得分:0)

这一行是问题所在:

int estimatedPopulation (int currentPopulation,
                         float growthRate (birthRate, deathRate))

成功:

int estimatedPopulation (int currentPopulation, float birthRate, float deathRate)
相反,用三个参数调用函数,如

estimatePopulation( currentPopulation, birthRate, deathRate );

或者使用两个参数声明它:

int estimatedPopulation (int currentPopulation, float growthrt ) { ... }

并将其命名为

estimatedPopulation( currentPopulation, growthRate (birthRate, deathRate));

编辑:

这里可能更重要 - C ++(和C)名称具有范围。你可以有两个相同但不同时命名的东西。在您的特定情况下,grouthRate 中的main()变量会隐藏具有相同名称的函数。因此,在main()中,您只能以grouthRate的身份访问float。另一方面,在main()之外,您只能将该名称作为函数访问,因为自动变量仅在main()的范围内可见。

希望我没有进一步混淆你:)

答案 4 :(得分:0)

您无法将函数作为参数传递。只需从estimatedPopulation()中删除它,并将其替换为'float growthRate'。在计算中使用它而不是调用函数:

int estimatedPopulation (int currentPopulation, float growthRate)
{
    return (currentPopulation + currentPopulation * growthRate / 100);
}

并将其命名为:

int foo = estimatedPopulation (currentPopulation, growthRate (birthRate, deathRate));

答案 5 :(得分:0)

修改估计的填充函数以采用float类型的增长参数。然后你可以使用birthRate和deathRate调用growthRate函数,并使用返回值作为增长到estimatedPopulation的输入。

float growthRate (float birthRate, float deathRate)     
{    
    return ((birthRate) - (deathRate));    
}

int estimatedPopulation (int currentPopulation, float growth)
{
    return ((currentPopulation) + (currentPopulation) * (growth / 100);
}

// main.cpp
int currentPopulation = 100;
int births = 50;
int deaths = 25;
int population = estimatedPopulation(currentPopulation, growthRate(births, deaths));