为什么我的HelloWorld函数未在此范围内声明?
#include <iostream>
using namespace std;
int main()
{
HelloWorld();
return 0;
}
void HelloWorld()
{
cout << "Hello, World" << endl;
}
我正在以下编译错误与G ++:为什么我的HelloWorld函数未在此范围内声明?
l1.cpp: In function 'int main()':
l1.cpp:5:15: error: 'HelloWorld' was not declared in this scope
您需要任何声明或定义函数,然后才能使用它。否则,它不知道HelloWorld()
作为函数存在。
你的主函数之前添加此:
void HelloWorld();
或者,您可以前移动的HelloWorld()
定义您的main()
:
#include <iostream>
using namespace std;
void HelloWorld()
{
cout << "Hello, World" << endl;
}
int main()
{
HelloWorld();
return 0;
}
你需要有之前的原型功能调用或其之前的整个功能。
因此,第一个是:
void HelloWorld();
int main() {
HelloWorld();
return 0;
}
void HelloWorld() {
cout << "Hello, World" << endl;
}
而第二个方法是:
void HelloWorld() {
cout << "Hello, World" << endl;
}
int main() {
HelloWorld();
return 0;
}
您需要转发声明HelloWorld()
所以main
知道它是什么。像这样:
#include <iostream>
using namespace std;
void HelloWorld();
int main()
{
HelloWorld();
return 0;
}
void HelloWorld()
{
cout << "Hello, World" << endl;
}
您必须将该功能放在主要功能之前。
您必须声明函数之前,你可以使用它:
#include <iostream>
using namespace std;
void HelloWorld();
int main()
{
HelloWorld();
return 0;
}
void HelloWorld()
{
cout << "Hello, World" << endl;
}
,或者你可以前main()
但你可以在声明它之前使用类成员。所以这个解释并不令人满意。 – Walter
@Walter我的解释特别包含了他的问题,而且因为他是新人,所以没有任何一点让他充满了这么多的信息。 – Nasreddine
重新排列HelloWorld()
,使其出现移动的HelloWorld()
定义之前main()
:
#include <iostream>
using namespace std;
void HelloWorld()
{
cout << "Hello, World" << endl;
}
int main()
{
HelloWorld();
return 0;
}
所有这些答案都是正确的,但奇怪的是,这将工作:
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;}来说,它并不立即显而易见(对于初学者/外人来说) }'我们有一个问题,但是如果我们用'class'替换'namespace'(并且在末尾加上';'),就不会有问题。 – Walter
没有为所提到的,即使用extern声明某种原因,没有人多了一个可能性:
#include <iostream>
using namespace std;
int main()
{
extern void HelloWorld();
HelloWorld();
return 0;
}
void HelloWorld()
{
cout << "Hello, World" << endl;
}
,当你不希望引入该功能的名称为命名空间范围很理想。
在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++定义所有其他的好做法主要功能之前的功能。
我喜欢这个问题是如何直接将StackExchange作为一个“热点问题”。 – surfasb
可能的重复[为什么原型是需要的,即使没有任何类声明?](http://*.com/questions/8199081/why-prototype-is-required-even-without-any-class-declaration) –