web-dev-qa-db-fra.com

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

#include <iostream>

using namespace std;

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

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

J'obtiens l'erreur de compilation suivante avec g ++:

l1.cpp: In function 'int main()':
l1.cpp:5:15: error: 'HelloWorld' was not declared in this scope
51
MatthewSot

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

Vous pouvez également déplacer la définition de HelloWorld() avant votre main():

#include <iostream>
using namespace std;

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

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

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

#include <iostream>

using namespace std;

void HelloWorld();

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

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

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

19
Nasreddine

Vous devez transmettre déclarer HelloWorld() pour que main sache de quoi il s'agit. Ainsi:

#include <iostream>
using namespace std;
void HelloWorld();
int main()
{
  HelloWorld();
  return 0;
}
void HelloWorld()
{
  cout << "Hello, World" << endl;
}
15
matthias

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

Donc, le premier 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;
}
9
Morten Kristensen

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

#include <iostream>
using namespace std;
int main()
{
  extern void HelloWorld();
  HelloWorld();
  return 0;
}
void HelloWorld()
{
  cout << "Hello, World" << endl;
}

Il est préférable de ne pas introduire le nom de la fonction dans la portée de l'espace de noms.

8
Gene Bushuyev

Toutes ces réponses sont correctes, mais curieusement, cela aurait fonctionné:

struct Hello {
  static int main() { World(); return 0; } /* note: World() not declared yet */
  static void World() { std::cout<<"Hello World"; }
};
int main() { return Hello::main(); } 
5
Walter

Vous devez mettre la fonction avant la fonction principale.

4
Tusk

en C++, vous devez définir ou au moins déclarer les fonctions avant de les appeler.

Ce que vous essayez de faire jusqu'à présent, c'est quelque chose comme ceci:

int main()
{
   cout << b;
   int b = 10;
}

Vous pouvez donc essayer comme ceci:

#include <iostream>
using namespace std;  

void HelloWorld();

int main()  
{
    HelloWorld();
    return 0;  
}
void HelloWorld()
{
  cout << "Hello, World" << endl;  
} 

C'est une bonne pratique en C++ de définir toutes les autres fonctions avant la fonction principale.

3
gprathour

Réorganisez HelloWorld() pour qu'il apparaisse avant main():

#include <iostream>
using namespace std;
void HelloWorld()
{
    cout << "Hello, World" << endl;
}
int main()
{
    HelloWorld();
    return 0;
}
2
moshbear