Подтвердить что ты не робот

"не может использоваться как ошибка функции"

Я пишу простую программу, которая использует функции, найденные в разных файлах .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;
}    
4b9b3361

Ответ 1

Вы используете growthRate как имя переменной, так и имя функции. Переменная скрывает эту функцию, а затем вы пытаетесь использовать переменную, как если бы она была функцией - это неверно.

Переименуйте локальную переменную.

Ответ 2

#include "header.h"

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

Ответ 3

Ваш компилятор прав. Вы не можете использовать переменную growthRate, которую вы указали в качестве функции.

Может быть, вы должны выбрать разные имена для своих переменных, чтобы они не переопределяли имена функций?

Ответ 4

Эта строка является проблемой:

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));

Edit:

Возможно, здесь важнее - имена С++ (и C) имеют область. У вас могут быть две вещи, которые называются одинаковыми, но не в одно и то же время. В вашем конкретном случае ваша переменная grouthRate в main() скрывает функцию с тем же именем. Таким образом, в main() вы можете получить доступ только к grouthRate как float. С другой стороны, вне main() вы можете получить доступ только к этому имени как к функции, так как переменная автоматически видна только в области main().

Надеюсь, я больше не смутил вас:)

Ответ 5

Вы не можете передать функцию в качестве параметра. Просто удалите его из оценочногопопуляции() и замените его на "float growthRate". используйте это в своем вычислении вместо вызова функции:

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

и назовите его как:

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

Ответ 6

Измените оценочную функцию популяции, чтобы принять аргумент роста типа 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));