Почему 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’
после выполнения предложения, все в порядке. Теперь мне любопытно, почему я должен был это сделать. Раньше мы использовали C++ в классах, но мне никогда не приходилось писать std:: прежде чем любой из этих команд. Что может отличаться в этой системе?
7 ответов:
кажется возможным, что ваш класс, возможно, использовал предварительно стандартный C++. Простой способ сказать, это посмотреть на ваши старые программы и проверить, видите ли:
#include <iostream.h>или
#include <iostream>первый является предварительно стандартным, и вы сможете просто сказать
coutв противоположностьstd::coutбез чего-либо дополнительного. Вы можете получить такое же поведение в стандарт C++, добавивusing std::cout;или
using namespace std;во всяком случае, только одна идея.
в стандарте C++,
coutопределена вstdпространство имен, поэтому вам нужно либо сказатьstd::coutили поставитьusing namespace std;в вашем коде, чтобы добраться до него.
однако так было не всегда, и в прошлом
coutбыл только в глобальном пространстве имен (или, позже, в обоих глобальных иstd). Поэтому я бы заключил, что ваши классы использовали более старый компилятор C++.
все в стандартной библиотеке Template/Iostream находится в пространстве имен std. Вы, наверное, использовали:
using namespace std;в ваших классах, и именно поэтому это сработало.
вы можете использовать пространства имен
но вы можете обидеть кого-то
почему" использование пространства имен std " считается плохой практикой?
Вы, наверное, имели
using namespace std;раньше в вашем коде вы делали в классе. Что явно говорит прекомпилятором искать символыstd, что означает, что вам не нужноstd::. Хотя это хорошая практика, чтобыstd::coutвместоcoutтаким образом, вы явно вызываетеstd::coutкаждый раз. Таким образом, если вы используете другую библиотеку, которая переопределяетcout, у вас все еще естьstd::coutповедения, а не какого-то другого пользовательского поведения.
" std " - это пространство имен, используемое для STL (стандартная библиотека шаблонов). Пожалуйста, обратитесь к http://en.wikipedia.org/wiki/Namespace_ (computer_science)#C. 2B. 2B
вы можете либо написать "use namespace std; "перед использованием любых функций stl, переменных или просто вставить" std:: "перед ними.
Если вы работаете в ROOT, вам даже не нужно писать
#include<iostream>иusing namespace std;просто начать сint filename().Это решит проблему.
Comments