我正在编写一个使用不同.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;
}
答案 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));