2011-11-22 1 views
45
#include <iostream> 

using namespace std; 

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

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

मैं जी के साथ ++ निम्नलिखित संकलन त्रुटि हो रही है:इस स्कोप में मेरा हैलोवर्ल्ड फ़ंक्शन क्यों घोषित नहीं किया गया है?

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

मुझे यह पसंद है कि इस सवाल ने स्टैक एक्सचेंज को सीधे "हॉट प्रश्न" के रूप में कैसे शूट किया। – 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

@ वाल्टर मेरी व्याख्या में विशेष रूप से उनकी समस्या शामिल है, और चूंकि वह नया है, इसलिए उसे बहुत अधिक जानकारी के साथ बाढ़ नहीं आ रही है। – 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

@ जीन यह तुरंत स्पष्ट नहीं है (वैसे भी एक शुरुआती/बाहरी व्यक्ति के लिए) क्यों 'नेमस्पेस एक्स {int a() {return b;} int b; } 'हमें एक समस्या है, लेकिन अगर हम' कक्षा 'द्वारा' नेमस्पेस 'को प्रतिस्थापित नहीं करते हैं (और अंत में'; 'जोड़ें)। – Walter

8

वहाँ किसी कारण कोई भी उल्लेख किया है, अर्थात् extern घोषणा प्रयोग करने के लिए एक और संभावना है:

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

यह है जब आप नाम स्थान दायरे में समारोह के नाम पर लागू करने के लिए नहीं करना चाहती प्राथमिकता दी जाती है।

3

सी ++ में आपको उन्हें कॉल करने से पहले परिभाषित करने या कम से कम कार्यों की घोषणा करने की आवश्यकता है।

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++ अन्य सभी को परिभाषित करने के लिए एक अच्छा अभ्यास है मुख्य समारोह से पहले कार्य करता है।