Ответ 1
Вы используете growthRate как имя переменной, так и имя функции. Переменная скрывает эту функцию, а затем вы пытаетесь использовать переменную, как если бы она была функцией - это неверно.
Переименуйте локальную переменную.
Я пишу простую программу, которая использует функции, найденные в разных файлах .cpp. Все мои прототипы содержатся в файле заголовка. Я передаю некоторые функции в другие функции и не уверен, правильно ли я делаю это. Ошибка, которую я получаю, это "имя функции" не может использоваться как функция ". Функция, которую он говорит, не может использоваться, это функция 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;
}
Вы используете growthRate как имя переменной, так и имя функции. Переменная скрывает эту функцию, а затем вы пытаетесь использовать переменную, как если бы она была функцией - это неверно.
Переименуйте локальную переменную.
#include "header.h"
int estimatedPopulation (int currentPopulation, float growthRate)
{
return currentPopulation + currentPopulation * growthRate / 100;
}
Ваш компилятор прав. Вы не можете использовать переменную growthRate, которую вы указали в качестве функции.
Может быть, вы должны выбрать разные имена для своих переменных, чтобы они не переопределяли имена функций?
Эта строка является проблемой:
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) имеют область. У вас могут быть две вещи, которые называются одинаковыми, но не в одно и то же время. В вашем конкретном случае ваша переменная grouthRate
в main()
скрывает функцию с тем же именем. Таким образом, в main()
вы можете получить доступ только к grouthRate
как float
. С другой стороны, вне main()
вы можете получить доступ только к этому имени как к функции, так как переменная автоматически видна только в области main()
.
Надеюсь, я больше не смутил вас:)
Вы не можете передать функцию в качестве параметра. Просто удалите его из оценочногопопуляции() и замените его на "float growthRate". используйте это в своем вычислении вместо вызова функции:
int estimatedPopulation (int currentPopulation, float growthRate)
{
return (currentPopulation + currentPopulation * growthRate / 100);
}
и назовите его как:
int foo = estimatedPopulation (currentPopulation, growthRate (birthRate, deathRate));
Измените оценочную функцию популяции, чтобы принять аргумент роста типа float. Затем вы можете вызвать функцию growthRate с помощью функции birthRate и deathRate и использовать возвращаемое значение в качестве входного сигнала для выражения в оценочной совокупности.
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));