58 votes

Pourquoi ma fonction HelloWorld n'est-elle pas déclarée dans cette portée?

#inclut 

utilisation de l'espace de noms std;

int main()
{
    HelloWorld();
    return 0;
}

void HelloWorld()
{
    cout << "Bonjour, le monde" << endl;
}

Je reçois l'erreur de compilation suivante avec g++:

l1.cpp: Dans la fonction 'int main()':
l1.cpp:5:15: erreur: 'HelloWorld' n'a pas été déclaré dans ce contexte

9 votes

J'adore comment cette question est immédiatement devenue une "Question Populaire" sur StackExchange.

2 votes

95voto

Mysticial Points 180300

Vous devez déclarer ou définir la fonction avant de pouvoir l'utiliser. Sinon, il ne sait pas que HelloWorld() existe en tant que fonction.

Ajoutez ceci avant votre fonction principale :

void HelloWorld();

Alternativement, vous pouvez déplacer la définition de HelloWorld() avant votre main() :

#include 
using namespace std;

void HelloWorld()
{
  cout << "Bonjour, le monde" << endl;
}

int main()
{
  HelloWorld();
  return 0;
}

21voto

Nasreddine Points 10826

Vous devez déclarer la fonction avant de pouvoir l'utiliser:

#include 

using namespace std;

void HelloWorld();

int main()
{
    HelloWorld();
    return 0;
}

void HelloWorld()
{
    cout << "Bonjour, Monde" << endl;
}

ou vous pouvez déplacer la définition de HelloWorld() avant main()

0 votes

Mais vous pouvez utilisez une classe membre avant de la déclarer. Donc, cette explication n'est pas satisfaisante.

15 votes

@Walter Mon explication couvre spécifiquement son problème, et puisqu'il est nouveau, il n'y a pas de sens à le submerger avec autant d'informations.

17voto

matthias Points 1208

Vous devez déclarer HelloWorld() en amont pour que main sache ce que c'est. Comme ceci :

#include 
using namespace std;
void HelloWorld();
int main()
{
  HelloWorld();
  return 0;
}
void HelloWorld()
{
  cout << "Bonjour, le monde" << endl;
}

11voto

Gene Bushuyev Points 3819

Il y a une autre possibilité pour une raison que personne n'a mentionnée, à savoir l'utilisation de la déclaration externe:

#include 
using namespace std;
int main()
{
  extern void HelloWorld();
  HelloWorld();
  return 0;
}
void HelloWorld()
{
  cout << "Bonjour, le Monde" << endl;
}

C'est préférable lorsque vous ne voulez pas introduire le nom de la fonction dans l'espace de nommage.

10voto

Morten Kristensen Points 4071

Vous devez avoir soit un prototype de la fonction avant l'invocation, soit la fonction complète avant.

Donc, la première façon est :

void HelloWorld();

int main() {
  HelloWorld();
  return 0;
}

void HelloWorld() {
  cout << "Hello, World" << endl;
}

Et la deuxième façon est :

void HelloWorld() {
  cout << "Hello, World" << endl;
}

int main() {
  HelloWorld();
  return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X