为啥我的 HelloWorld 函数没有在这个范围内声明?

Posted

技术标签:

【中文标题】为啥我的 HelloWorld 函数没有在这个范围内声明?【英文标题】:Why is my HelloWorld function not declared in this scope?为什么我的 HelloWorld 函数没有在这个范围内声明? 【发布时间】:2012-01-04 06:57:56 【问题描述】:
#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

【问题讨论】:

我很喜欢这个问题作为“热门问题”直接在 StackExchange 上出现。 Why prototype is required even without any class declaration? 的可能重复项 【参考方案1】:

您需要先声明或定义函数,然后才能使用它。否则,它不知道HelloWorld() 作为函数存在。

在你的主要功能之前添加这个:

void HelloWorld();

或者,您可以将HelloWorld() 的定义移到main() 之前:

#include <iostream>
using namespace std;

void HelloWorld()

  cout << "Hello, World" << endl;


int main()

  HelloWorld();
  return 0;

【讨论】:

【参考方案2】:

您必须先声明该函数,然后才能使用它:

#include <iostream>

using namespace std;

void HelloWorld();

int main()

    HelloWorld();
    return 0;


void HelloWorld()

    cout << "Hello, World" << endl;

或者你可以将HelloWorld()的定义移到main()之前

【讨论】:

但您可以在声明类成员之前使用它。所以这个解释并不令人满意。 @Walter 我的解释具体涵盖了他的问题,而且由于他是新来的,没有必要向他提供这么多信息。【参考方案3】:

您需要转发声明HelloWorld(),以便main 知道它是什么。像这样:

#include <iostream>
using namespace std;
void HelloWorld();
int main()

  HelloWorld();
  return 0;

void HelloWorld()

  cout << "Hello, World" << endl;

【讨论】:

【参考方案4】:

您需要在调用之前有函数的原型或在它之前有整个函数。

所以第一个是:

void HelloWorld();

int main() 
  HelloWorld();
  return 0;


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

第二种方式是:

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


int main() 
  HelloWorld();
  return 0;

【讨论】:

【参考方案5】:

由于某种原因没有人提到,还有一种可能性,即使用 extern 声明:

#include <iostream>
using namespace std;
int main()

  extern void HelloWorld();
  HelloWorld();
  return 0;

void HelloWorld()

  cout << "Hello, World" << endl;

当您不想将函数的名称引入命名空间范围时,这是更可取的。

【讨论】:

【参考方案6】:

所有这些答案都是正确的,但奇怪的是,这会奏效:

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

【讨论】:

没什么奇怪的,类的所有成员都已经在成员函数体内定义了。 @Gene 这不是很明显(无论如何对于初学者/局外人来说)为什么在namespace X int a() return b; int b; 中我们有问题,但如果我们将namespace 替换为class(并添加;最后)。【参考方案7】:

你必须把函数放在主函数之前。

【讨论】:

【参考方案8】:

在 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++ 中,在主函数之前定义所有其他函数是一种很好的做法。

【讨论】:

【参考方案9】:

重新排列HelloWorld(),使其出现在main()之前:

#include <iostream>
using namespace std;
void HelloWorld()

    cout << "Hello, World" << endl;

int main()

    HelloWorld();
    return 0;

【讨论】:

【参考方案10】:

如果你定义你在你的主函数下面运行,你应该首先在上面声明它。

#include<iostream>
using namespace std;
void HelloWorld();
int main()  

    HelloWorld();
    return 0;  

void HelloWorld()

  cout << "Hello, World" << endl;  
 

【讨论】:

以上是关于为啥我的 HelloWorld 函数没有在这个范围内声明?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个javascript函数失去了闭包范围?

为啥函数被描述为块范围

为啥这个程序在调用函数时会出现分段错误?

为啥在终端中没有 getch() 就看不到 hello world 的输出;虽然我可以使用 memcpy() 函数查看多个 printf 吗?

为啥 export const helloWorld 在 firebase deploy 中出现错误而 export.helloWorld 没有?

为啥在这个单元测试中没有调用 finalize 函数?