为啥我的 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 函数没有在这个范围内声明?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在终端中没有 getch() 就看不到 hello world 的输出;虽然我可以使用 memcpy() 函数查看多个 printf 吗?
为啥 export const helloWorld 在 firebase deploy 中出现错误而 export.helloWorld 没有?