Obecnie używam Naucz się C++ w 21-dniowej, drugiej edycji książki, aby dowiedzieć się o kodowaniu C++, wraz z Microsoft Visual C++ 2010 Express. Na końcu rozdziału 1 znajduje się małe ćwiczenie dotyczące pisania i kompilowania następującego kodu:Jaki jest związek między stacją nazw iostream a stacją nazw?
#include <iostream>
int main()
{
cout << "Hello World!\n";
return 0;
}
Całkiem proste, prawda? Jednak ku mojemu zdziwieniu kod nie będzie kompilować, z powodu tego błędu:
error C2065: 'cout' : undeclared identifier
zacząłem czyszczenie w internecie, a wkrótce znaleźć kilka rozwiązań here. Okazuje się, że musiałem dodać using namespace std;
do mojego kodu!
Jednak w książce nie było żadnej wzmianki o przestrzeniach nazw, więc uznałem, że książka jest nieaktualna. (Wykorzystuje dyrektywę pre-procesora #include <iostream.h>
!) Po kilku badaniach sieciowych znalazłem wiele informacji o przestrzeniach nazw, namespace std
, wraz z historycznym tłem na <iostream.h>
i <iostream>
, a cały ten przepływ nowych informacji jest dla mnie dość mylący. (Nie wspominając o wszystkich niepotrzebnych Google Pozycje dotyczące chorób przenoszonych drogą płciową medycznych ...)
Więc oto kilka pytań, ja mam tak daleko:
- Jeśli jestem w tym bibliotekę
iostream
, dlaczego jestnamespace
musisz znaleźćcout
? Czy jest gdzieś innycout
, który mógłby spowodować konflikt nazwy? Gdyby ktoś mógł to przedstawić, byłoby świetnie.
I jako bonus, niektóre tło historyczne:
Co dokładnie było
iostream.h
zanim została zmieniona naiostream
?Czy
namespace
odegrało rolę w tej zmianie?
Nie trzeba dodawać do kodu "using namespace std;". Trzeba było powiedzieć 'std :: cout' lub' using std :: cout; 'wewnątrz' main'. – juanchopanza
Ale dlaczego część 'std' jest nawet potrzebna? Czy w 'iostream' jest kilka' cout'? –
Ponieważ 'cout' znajduje się w przestrzeni nazw' std'. – juanchopanza