Waarom std::cout in plaats van gewoon cout?

Ik krijg deze foutmeldingen voor alle couten endl:

main.cc:17:5: error: ‘cout’ was not declared in this scope
main.cc:17:5: note: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: note:   ‘std::cout’

Na het volgen van de suggestie is alles in orde. Nu ben ik benieuwd waarom ik dat moest doen. We gebruikten eerder C++ in klassen, maar ik hoefde nooit een std::te schrijven voor een van die commando’s. Wat kan er anders zijn op dit systeem?


Antwoord 1, autoriteit 100%

Het lijkt mogelijk dat uw klas pre-standaard C++ heeft gebruikt. Een gemakkelijke manier om erachter te komen, is door naar uw oude programma’s te kijken en te controleren of u het volgende ziet:

#include <iostream.h>

of

#include <iostream>

De eerste is pre-standaard, en je kunt gewoon coutzeggen in plaats van std::coutzonder iets extra’s. U kunt hetzelfde gedrag krijgen in standaard C++ door toe te voegen

using std::cout;

of

using namespace std;

Toch maar één idee.


Antwoord 2, autoriteit 19%

In de C++-standaard wordt coutgedefinieerd in de naamruimte std, dus je moet ofwel std::coutzeggen of

using namespace std;

in uw code om er bij te komen.

Dit was echter niet altijd het geval, en in het verleden bevond coutzich alleen in de globale naamruimte (of later in zowel global als std). Ik zou daarom concluderen dat je klassen een oudere C++-compiler gebruikten.


Antwoord 3, autoriteit 10%

Alles in de Standard Template/Iostream Library bevindt zich in namespace std. Je hebt waarschijnlijk het volgende gebruikt:

using namespace std;

In jouw lessen, en daarom werkte het.


Antwoord 4, autoriteit 6%

Je zou de naamruimte kunnen gebruiken

http://www.daniweb.com/software-development/cpp/threads/109029/what-its-the-use-of-using-namespace-std

Maar je zou iemand kunnen beledigen

Waarom wordt “namespace std gebruikt” beschouwd als een slechte gewoonte?


Antwoord 5, autoriteit 2%

Je had waarschijnlijk al eerder using namespace std;gebruikt in je code die je in de klas deed. Dat vertelt de precompiler expliciet om te zoeken naar de symbolen in std, wat betekent dat je std::niet hoeft te gebruiken. Hoewel het een goede gewoonte is om std::coutte gebruiken in plaats van cout, zodat je elke keer expliciet std::coutaanroept. Op die manier heb je, als je een andere bibliotheek gebruikt die coutherdefinieert, nog steeds het gedrag std::coutin plaats van een ander aangepast gedrag.


Antwoord 6

“std” is een naamruimte die wordt gebruikt voor STL (Standard Template Library). Raadpleeg https://en.wikipedia.org/wiki/Namespace#Use_in_common_languages

Je kunt ofwel using namespace std;voordat je stl-functies of variabelen gebruikt, of gewoon std::ervoor invoegen.


Antwoord 7

Als u in ROOT werkt, hoeft u niet eens #include<iostream>te schrijven en using namespace std;te gebruiken, gewoon beginnen vanaf int filename().

Dit lost het probleem op.

Other episodes