Sono nuovo alla programmazione in C++ e cerco di fare il mio primo esercizio su un mac usando gcc nel terminale.C++: problema nell'uso di std :: cout con gcc su un osx
Purtroppo, non riesco a compilare a causa di problemi relativi a iostream. Con un semplice programma come:
#include "<"iostream">"
int main()
{
std::cout << "hello world";
std::cout << endl;
return 0;
}
mi dà l'errore:
error: ‘endl’ was not declared in this scope
rimuovere il cout < < endl; linea mi dà questi errori:
Undefined symbols:
"___gxx_personality_v0", referenced from:
___gxx_personality_v0$non_lazy_ptr in cceBlyS2.o
"std::ios_base::Init::~Init()", referenced from:
___tcf_0 in cceBlyS2.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
_main in cceBlyS2.o
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int)in cceBlyS2.o
"std::cout", referenced from:
__ZSt4cout$non_lazy_ptr in cceBlyS2.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
È evidente che l'intestazione iostream non è collegata correttamente. Ho provato "<" iostream.h ">" e "iostream.h" senza successo.
Qualcuno ha qualche suggerimento che potrebbe aiutarmi? Grazie!
È meno contro lo scopo di un namespace di "usare namespace std :: x;" per un dato 'x' che è necessario accedere, piuttosto che portare l'intero spazio dei nomi in ambito in un colpo solo. –
@Chris: non sono d'accordo. Mentre eviterei sicuramente qualcosa come 'using namespace std;' in un * file di header *, penso che sia perfettamente a posto in un file sorgente, specialmente uno semplice come questo. Non vedo alcun motivo per inquinare il file sorgente con 'std ::' dappertutto, a meno che non sia assolutamente necessario. Inoltre, preferirei non riutilizzare mai un nome già utilizzato nell'STL. Portare tutto lo spazio dei nomi mi permetterebbe di cogliere presto un simile errore. –
@ e.James: c'è un piccolo problema con questo: non si sa cosa c'è nel namespace '' std' - può e varia tra le implementazioni. È possibile avere qualcosa che funzioni bene per un periodo di tempo arbitrario e quindi interrompere il lavoro su un compilatore diverso (versione di a). Certo, in * questo * caso, dove il solo * nome che stai definendo è 'main', non c'è molto che possa andare storto - ma quando/se fai qualcosa di più, è tutta un'altra storia. –