2012-06-08 84 views
50

我得到這些錯誤信息所有coutendl爲什麼std :: cout而不是簡單的cout?

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::。這個系統可能有什麼不同?

+1

你不得不說你正在使用std來知道cout是什麼。如果你這樣做是一個導入,你可以簡單地說cout,否則你必須完全證明它告訴編譯器什麼是真正的 – pengibot

+35

恭喜你,你是導致每一個單一的'std'命名空間的愚蠢習慣的100萬受害者我見過的C++入門課程似乎正在採用... –

+1

對不起Luc,語言中的編碼不限於那些正在傾聽關於該語言入門課程的小組人員。 – erikbwork

回答

102

看起來你的類似乎有可能使用了預標準的C++。一個簡單的方法來告訴,是看你的舊程序和檢查,你看到了:

#include <iostream.h> 

#include <iostream> 

前者是預標準,你就可以只說cout而不是std::cout沒有任何額外的。您可以通過添加

using std::cout; 

using namespace std; 

只是一個想法得到標準C++相同的行爲,無論如何。

+1

最完整,最可讀的答案!我甚至有問題! – erikbwork

+2

請不要使用'using namespace std;',例如請看http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice –

12

標準模板/ Iostream庫中的所有內容均位於名稱空間標準中。你可能使用:

using namespace std; 

在你的類,這就是爲什麼它的工作。

+13

雖然'cout'不是STL的一部分...... –

+0

@OliCharlesworth固定:D。 – mfontanini

24

在C++標準,coutstd命名空間中定義,所以你需要或者說std::cout或將

using namespace std; 
在你的代碼

爲了得到它。

然而,這並非總是如此,在過去cout只是在全局命名空間(或者,以後,在全球和std)。因此我會得出結論,你的類使用了一個較老的C++編譯器。

2

您可能在上課之前的代碼中使用過using namespace std;。這明確告訴預編譯器在std中查找符號,這意味着您不需要std::。儘管std::cout而不是cout的做法很好,所以您每次都明確調用std::cout。這樣,如果您正在使用另一個重新定義cout的庫,則仍然具有std::cout行爲,而不是其他一些自定義行爲。

2

「std」是用於STL(標準模板庫)的名稱空間。請參考http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B

您可以寫入「use namespace std;」在使用任何stl函數,變量或者只是inser「std ::」之前。

+0

迂腐,也許:它實際上是C++標準庫元素,不僅僅是STL,它們在命名空間中'std'。參考C++ 03:17.4.1.1/2:「除宏,運算符new和運算符delete之外的所有[C++標準]庫實體在命名空間std中嵌套的 命名空間或名稱空間中定義。 –

-2

如果ROOT的工作,你甚至不用寫的#include和使用命名空間性病; 只需從int filename()開始。 只是試一試。

+0

這不提供問題的答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [來自評論](/ review/low-quality-posts/17069531) –