Почему моя функция HelloWorld не объявлена ​​в этой области? - PullRequest
50 голосов
/ 23 ноября 2011
#include <iostream>

using namespace std;

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

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

Я получаю следующую ошибку компиляции с g ++:

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

Ответы [ 9 ]

86 голосов
/ 23 ноября 2011

Вам необходимо либо объявить, либо определить функцию, прежде чем вы сможете ее использовать.В противном случае он не знает, что HelloWorld() существует как функция.

Добавьте это перед вашей основной функцией:

void HelloWorld();

В качестве альтернативы, вы можете переместить определение HelloWorld() до того, какваш main():

#include <iostream>
using namespace std;

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

int main()
{
  HelloWorld();
  return 0;
}
19 голосов
/ 23 ноября 2011

Вы должны объявить функцию перед использованием:

#include <iostream>

using namespace std;

void HelloWorld();

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

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

или вы можете переместить определение HelloWorld() до main()

15 голосов
/ 23 ноября 2011

Вам нужно отправить декларацию HelloWorld(), чтобы main знал, что это такое.Вот так:

#include <iostream>
using namespace std;
void HelloWorld();
int main()
{
  HelloWorld();
  return 0;
}
void HelloWorld()
{
  cout << "Hello, World" << endl;
}
9 голосов
/ 23 ноября 2011

Вам необходимо иметь либо прототип функции перед вызовом, либо всю функцию перед ним.

Итак, первое:

void HelloWorld();

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

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

И второе:

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

int main() {
  HelloWorld();
  return 0;
}
8 голосов
/ 23 ноября 2011

Существует еще одна возможность по какой-то причине, о которой никто не упомянул, а именно использование объявления extern:

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

Предпочтительно, если вы не хотите вводить имя функции в область пространства имен.

5 голосов
/ 23 ноября 2011

Все эти ответы верны, но, как ни странно, это сработало бы:

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(); } 
4 голосов
/ 23 ноября 2011

Вы должны поставить функцию перед основной функцией.

3 голосов
/ 23 ноября 2011

в C ++ вам нужно определить или хотя бы объявить функции перед их вызовом.

То, что вы пытаетесь сделать до сих пор, выглядит примерно так:

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

Так что вы можете попробовать вот так:

#include <iostream>
using namespace std;  

void HelloWorld();

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

Хорошей практикой в ​​C ++ является определение всех других функций перед основной функцией.

2 голосов
/ 23 ноября 2011

Переставьте HelloWorld() так, чтобы оно появилось раньше main():

#include <iostream>
using namespace std;
void HelloWorld()
{
    cout << "Hello, World" << endl;
}
int main()
{
    HelloWorld();
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...