«не может быть использован как ошибка функции» - PullRequest
15 голосов
/ 10 декабря 2010

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

Функция GrowRate:

 #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 ]

37 голосов
/ 10 декабря 2010

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

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

1 голос
/ 10 декабря 2010
#include "header.h"

int estimatedPopulation (int currentPopulation, float growthRate)
{
    return currentPopulation + currentPopulation * growthRate  / 100;
}
0 голосов
/ 10 декабря 2010

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

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

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

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

int foo = estimatedPopulation (currentPopulation, growthRate (birthRate, deathRate));
0 голосов
/ 10 декабря 2010

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

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

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

0 голосов
/ 10 декабря 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...