web-dev-qa-db-ja.com

単にcoutではなくstd :: 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::を記述する必要はありませんでした。このシステムでは何が違うのでしょうか?

59
erikbwork

クラスが先行標準のC++を使用している可能性があります。わかりやすい方法は、古いプログラムを見て確認することです:

#include <iostream.h>

または

#include <iostream>

前者は先行標準であり、std::coutではなくcoutとだけ言うことができます。以下を追加することにより、標準C++で同じ動作を得ることができます。

using std::cout;

または

using namespace std;

とにかく、ただ一つのアイデア。

119
FatalError

C++標準では、coutstd名前空間で定義されているため、std::coutと言うかput

using namespace std;

それを得るためにあなたのコードで。

ただし、これは常にそうとは限らず、過去のcoutはグローバル名前空間(または、後で、グローバルとstdの両方)にありました。したがって、あなたのクラスは古いC++コンパイラを使用していると結論付けます。

24
Matthew Walton

標準テンプレート/ Iostreamライブラリのすべては、名前空間stdにあります。おそらく使用したことがあります:

using namespace std;

あなたのクラスでは、それがうまくいった理由です。

13
mfontanini
6
posttool

クラスで行ったコードには、おそらくusing namespace std;があったでしょう。これは、プリコンパイラにstdのシンボルを探すように明示的に指示します。つまり、std::を使用する必要はありません。ただし、coutの代わりにstd::coutを使用することをお勧めします。そのため、毎回明示的にstd::coutを呼び出します。そうすれば、coutを再定義する別のライブラリを使用している場合でも、他のカスタム動作の代わりにstd::cout動作を使用できます。

3
Hans Z

「std」は、STL(標準テンプレートライブラリ)に使用される名前空間です。 http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B を参照してください

「use namespace std;」と書くことができます。 stl関数、変数、または単にそれらの前にある「std ::」を使用する前に。

1
Edmund