Bonjour à tous, je suis novice en programmation et j'essaie de me lancer sur la programmation en c++. Je suis bloqué sur le chapitre "découper son programme en fonctions".
Quand j'essaie de rentrer le programme ci-dessous, le compileur me dit : " error: no previous declaration for 'int ajouteDeux(int)' [-Werror=missing-declarations]|"
Mais je ne comprends pas l'erreur car c'est le cours qui demande de mettre ce programme et de le lancer. Pouvez me dire où est mon erreur svp ? Merci d'avance Nico
J'ai l'impression que ton compilateur est configuré de manière très très restrictive : à la fois signaler tous les warnings ettout warning empêche la compilation. Solution possibles : - définir la fonction comme static, les fonctions static sont privées et ne nécessitent pas systématiquement de déclaration préliminaire. - pré-déclarer la fonction avant sa définition. - prendre un niveau de warnings de compilation moins fort car ne pas déclarer une fonction publique n'est pas si grave. Et se trouve d'ailleurs dans des millions de codes. - demander à ce que les warnings ne soit pas des erreurs. Solution de loin la moins bonne.
Solution possibles : - définir la fonction comme static, les fonctions static sont privées et ne nécessitent pas systématiquement de déclaration préliminaire.
Non !!
NicolasSiffrid a écrit:
#include <iostream>
using namespace std;
int ajouteDeux(int nombreRecu)
{
int valeur(nombreRecu + 2);
return valeur;
}
Certes, ton compilateur est configuré de façon très restrictive, pourtant le message est clair: Ta fonction n'est pas déclarée, tu n'as fais que la définir. Ajouter la déclaration résoudra le problème:
#include <iostream>
int ajouteDeux(int); // Déclaration
int ajouteDeux(int nombreRecu) // Définition
{
int valeur(nombreRecu + 2);
return valeur;
}
Au passage, l'utilisation de "using namespace std;" est considéré comme une mauvaise pratique.Qualifie plainement tes appels aux fonctionalités de la librairie standard, ca évitera les conflits potentiels.
> ne pas déclarer une fonction publique n'est pas si grave. Et se trouve d'ailleurs dans des millions de codes.
En fait si. On peut facilement se retrouver avec 2 fonctions différentes dans 2 sources cpp différences. Il y a aura des erreurs au moment de l'édition de lien alors que les fonctions sont des détails d'implémentations. Et dans le .h, bah, on ne sait pas à quoi elle sert.
Ajouter une déclaration ne fait que masquer le problème, mais celui-ci est toujours présent. Du coup, c'est mieux de mettre les détails du .cpp dans un namespace anonyme (plus générique que static).
Après, perso, je désactive cet avertissement (-Wno-missing-declarations) pour des tests ou des programmes d'un seul fichier.
@NicolasSiffrid C'est bien d'avoir un niveau d'avertissement élevé, mais tu peux désactiver -Werror s'il te gêne (il transforme tous les avertissements en erreur). Ce n'est bien sûr pas une raison pour les ignorer.
Merci pour vos réponses et vos conseils. Oui effectivement j'ai dû installer un autre Compilateur / Debuggeur et il est configuré en très restrictif.
Je vais essayer la solution ce soir. Si ca marche je vais rager un peu car j'avais voulu la déclarer mais de mémoire j'avais mis :
int ajouteDeux();
Découper son programme en fonction
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.