Почему 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:: прежде чем любой из этих команд. Что может отличаться в этой системе?

567   7  

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;

в ваших классах, и именно поэтому это сработало.

Вы, наверное, имели 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

    Ничего не найдено.