Почему std:: cout вместо просто cout?
Я получаю эти сообщения об ошибках для всех cout
и 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’
После выполнения этого предложения все в порядке. Теперь мне любопытно, почему я должен был это сделать. Раньше мы использовали С++ в классах, но мне никогда не приходилось писать std::
перед любой из этих команд. Что может быть другим в этой системе?
Ответы
Ответ 1
Кажется, ваш класс, возможно, использовал pre-standard С++. Легкий способ сказать, это посмотреть на свои старые программы и проверить, видите ли вы:
#include <iostream.h>
или
#include <iostream>
Первый является стандартным, и вы можете просто сказать cout
в отличие от std::cout
без каких-либо дополнительных. Вы можете получить такое же поведение в стандартном С++, добавив
using std::cout;
или
using namespace std;
Только одна идея. Во всяком случае.
Ответ 2
В стандарте С++ cout
определяется в пространстве имен std
, поэтому вам нужно либо сказать std::cout
, либо поместить
using namespace std;
в вашем коде, чтобы добраться до него.
Однако это не всегда так, и в прошлом cout
находилось только в глобальном пространстве имен (или, позже, в глобальном и std
). Поэтому я пришел к выводу, что ваши классы использовали более старый компилятор С++.
Ответ 3
Все в стандартной библиотеке шаблонов /Iostream находится в пространстве имен std. Вы, вероятно, использовали:
using namespace std;
В ваших классах и почему он сработал.
Ответ 4
Вы можете использовать пространство имен
http://www.daniweb.com/software-development/cpp/threads/109029/what-its-the-use-of-using-namespace-std
Но вы можете оскорбить кого-то
Почему используется "namespace std" ? считается плохой практикой?
Ответ 5
Вероятно, у вас был using namespace std;
в вашем коде, который вы делали в классе. Это явно указывает прекомпилеру искать символы в std
, что означает, что вам не нужно std::
. Хотя это хорошая практика для std::cout
вместо cout
, поэтому вы явно вызываете std::cout
каждый раз. Таким образом, если вы используете другую библиотеку, переопределяющую cout
, у вас все еще есть поведение std::cout
, а не какое-либо другое поведение.
Ответ 6
"std" - это пространство имен, используемое для STL (стандартная библиотека шаблонов). См. http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B
Вы можете либо написать "use namespace std;" перед использованием каких-либо stl-функций, переменных или просто вставки "std::" перед ними.
Ответ 7
если они работают в ROOT, вам даже не нужно писать #include и использовать пространство имен std;
просто начните с int filename().
просто попробуйте.