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

using namespace std; 

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

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

sto ottenendo il seguente errore di compilazione con g ++:Perché la mia funzione HelloWorld non è dichiarata in questo ambito?

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

Mi piace come questa domanda ha girato dritto su StackExchange come una "domanda calda". – surfasb

+2

possibile duplicato di [Perché il prototipo è richiesto anche senza alcuna dichiarazione di classe?] (Http://stackoverflow.com/questions/8199081/why-prototype-is-required-even- with-any-class-declaration) –

risposta

81

è necessario o dichiarare o definire la funzione prima di poterlo utilizzare. Altrimenti, non sa che HelloWorld() esiste come una funzione.

Aggiungi questa prima funzione principale:

void HelloWorld(); 

In alternativa, è possibile spostare la definizione di HelloWorld() prima main():

#include <iostream> 
using namespace std; 

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

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

È necessario disporre di un prototipo della funzione prima della invocazione o l'intera funzione prima di esso.

Quindi il primo è:

void HelloWorld(); 

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

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

E il secondo modo è:

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

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

è necessario inoltrare dichiarare HelloWorld() così main sa di cosa si tratta. Così:

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

Devi mettere la funzione prima della funzione principale.

19

è necessario dichiarare la funzione prima è possibile utilizzarlo:

#include <iostream> 

using namespace std; 

void HelloWorld(); 

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

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

oppure è possibile spostare la definizione di HelloWorld() prima main()

+0

ma tu puoi usare un membro della classe prima di dichiararlo. Quindi questa spiegazione non è soddisfacente. – Walter

+14

@Walter La mia spiegazione riguarda specificamente il suo problema, e dal momento che è nuovo, non ha senso riempirlo di così tante informazioni. – Nasreddine

2

Riorganizza HelloWorld() in modo che appaia prima main():

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

Tutte queste risposte sono corrette, ma stranamente, questo avrebbe funzionato:

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

Non c'è niente di strano, tutti i membri della classe sono già definiti all'interno del corpo delle funzioni membro. –

+0

@Gene Non è immediatamente ovvio (ad un principiante/estraneo comunque) perché nel 'namespace X {int a() {return b;} int b; } 'abbiamo un problema, ma non se sostituiamo' namespace' di 'class' (e aggiungiamo'; 'alla fine). – Walter

8

C'è una possibilità in più per qualche motivo nessuno ha menzionato, vale a dire utilizzando dichiarazione extern:

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

E 'preferibile quando non si vuole introdurre il nome della funzione in ambito namespace.

3

in C++ è necessario definire o almeno dichiarare le funzioni prima di chiamarle.

Che cosa si sta cercando di fare fino ad ora è qualcosa di simile:

int main() 
{ 
    cout << b; 
    int b = 10; 
} 

Così si può anche provare in questo modo:

#include <iostream> 
using namespace std; 

void HelloWorld(); 

int main() 
{ 
    HelloWorld(); 
    return 0; 
} 
void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 

Si tratta di una buona pratica in C++ per definire tutti gli altri funzioni prima della funzione principale.

Problemi correlati