2011-11-22 126 views
45
#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 
+6

我喜欢这个问题是如何直接将StackExchange作为一个“热点问题”。 – surfasb

+2

可能的重复[为什么原型是需要的,即使没有任何类声明?](http://stackoverflow.com/questions/8199081/why-prototype-is-required-even-without-any-class-declaration) –

回答

81

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

你的主函数之前添加此:

void HelloWorld(); 

或者,您可以前移动的HelloWorld()定义您的main()

#include <iostream> 
using namespace std; 

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

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

你需要有之前的原型功能调用或其之前的整个功能。

因此,第一个是:

void HelloWorld(); 

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

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

而第二个方法是:

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

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

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

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

您必须将该功能放在主要功能之前。

19

您必须声明函数之前,你可以使用它:

#include <iostream> 

using namespace std; 

void HelloWorld(); 

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

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

,或者你可以前main()

+0

但你可以在声明它之前使用类成员。所以这个解释并不令人满意。 – Walter

+14

@Walter我的解释特别包含了他的问题,而且因为他是新人,所以没有任何一点让他充满了这么多的信息。 – Nasreddine

2

重新排列HelloWorld(),使其出现移动的HelloWorld()定义之前main()

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

所有这些答案都是正确的,但奇怪的是,这将工作:

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(); } 
+1

没有什么奇怪的,这个类的所有成员都已经在成员函数体内定义了。 –

+0

@Gene对于'namespace X {int a(){return b;} int b;}来说,它并不立即显而易见(对于初学者/外人来说) }'我们有一个问题,但是如果我们用'class'替换'namespace'(并且在末尾加上';'),就不会有问题。 – Walter

8

没有为所提到的,即使用extern声明某种原因,没有人多了一个可能性:

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

,当你不希望引入该功能的名称为命名空间范围很理想。

3

在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++定义所有其他的好做法主要功能之前的功能。