web-dev-qa-db-fra.com

"ne peut pas être utilisé comme une erreur de fonction"

J'écris un programme simple qui utilise des fonctions trouvées dans différents fichiers .cpp. Tous mes prototypes sont contenus dans un fichier d'en-tête. Je passe certaines fonctions à d’autres fonctions et je ne sais pas si je le fais correctement. L'erreur que je reçois est "Le 'nomfonction' ne peut pas être utilisé comme une fonction". La fonction qu'il dit ne peut pas être utilisée est la fonction growthRate et la fonction estimatedPopulation. Les données arrivent via une fonction d'entrée (qui, à mon avis, fonctionne).

Merci!

En tête de fichier:

#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

Fonction GrowthRate:

 #include "header.h"

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

fonction estimée de la population:

    #include "header.h"

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

principale:

#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;
}    
15
darko

Vous utilisez growthRate à la fois comme nom de variable et comme nom de fonction. La variable masque la fonction et vous essayez ensuite de l'utiliser comme s'il s'agissait de la fonction, ce qui n'est pas valide.

Renommez la variable locale.

36
Martin v. Löwis
#include "header.h"

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

Vous ne pouvez pas passer une fonction en tant que paramètre. Supprimez-le simplement de installedPopulation () et remplacez-le par 'float growthRate' utilisez ceci dans votre calcul au lieu d'appeler la fonction:

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

et appelez-le comme:

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

Modifiez votre fonction de population estimée pour prendre un argument de croissance de type float. Vous pouvez ensuite appeler la fonction growthRate avec votre birthRate et votre deathRate et utiliser la valeur de retour comme entrée pour la croissance de la population estimée.

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
Zac Howland

Votre compilateur a raison. Vous ne pouvez pas utiliser la variable growthRate que vous avez déclarée dans main en tant que fonction.

Peut-être devriez-vous choisir des noms différents pour vos variables afin qu'elles ne remplacent pas les noms de fonctions?

0
Crazy Eddie

Cette ligne est le problème:

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

Fais-le:

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

au lieu de cela et invoquer la fonction avec trois arguments comme

estimatePopulation( currentPopulation, birthRate, deathRate );

OU déclarez-le avec deux arguments tels que:

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

et l'appeler comme

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

Modifier:

Probablement plus important ici - les noms C++ (et C) ont scope . Vous pouvez nommer deux choses identiques mais pas en même temps. Dans votre cas particulier, votre variable grouthRate dans la main() cache la fonction du même nom. Donc, dans main(), vous pouvez uniquement accéder à grouthRate en tant que float. D'autre part, en dehors de main(), vous ne pouvez accéder à ce nom qu'en tant que fonction, car la variable automatic n'est visible que dans le cadre de main().

J'espère juste que je ne vous ai plus confus :)

0
Nikolai Fetissov