Ik krijg deze foutmeldingen voor alle cout
en 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 cout
zeggen in plaats van std::cout
zonder 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 cout
gedefinieerd in de naamruimte std
, dus je moet ofwel std::cout
zeggen of
using namespace std;
in uw code om er bij te komen.
Dit was echter niet altijd het geval, en in het verleden bevond cout
zich 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
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::cout
te gebruiken in plaats van cout
, zodat je elke keer expliciet std::cout
aanroept. Op die manier heb je, als je een andere bibliotheek gebruikt die cout
herdefinieert, nog steeds het gedrag std::cout
in 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.