すべての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::
を記述する必要はありませんでした。このシステムでは何が違うのでしょうか?
クラスが先行標準のC++を使用している可能性があります。わかりやすい方法は、古いプログラムを見て確認することです:
#include <iostream.h>
または
#include <iostream>
前者は先行標準であり、std::cout
ではなくcout
とだけ言うことができます。以下を追加することにより、標準C++で同じ動作を得ることができます。
using std::cout;
または
using namespace std;
とにかく、ただ一つのアイデア。
C++標準では、cout
はstd
名前空間で定義されているため、std::cout
と言うかput
using namespace std;
それを得るためにあなたのコードで。
ただし、これは常にそうとは限らず、過去のcout
はグローバル名前空間(または、後で、グローバルとstd
の両方)にありました。したがって、あなたのクラスは古いC++コンパイラを使用していると結論付けます。
標準テンプレート/ Iostreamライブラリのすべては、名前空間stdにあります。おそらく使用したことがあります:
using namespace std;
あなたのクラスでは、それがうまくいった理由です。
名前空間を使用できます
しかし、あなたは誰かを怒らせるかもしれません
クラスで行ったコードには、おそらくusing namespace std;
があったでしょう。これは、プリコンパイラにstd
のシンボルを探すように明示的に指示します。つまり、std::
を使用する必要はありません。ただし、cout
の代わりにstd::cout
を使用することをお勧めします。そのため、毎回明示的にstd::cout
を呼び出します。そうすれば、cout
を再定義する別のライブラリを使用している場合でも、他のカスタム動作の代わりにstd::cout
動作を使用できます。
「std」は、STL(標準テンプレートライブラリ)に使用される名前空間です。 http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B を参照してください
「use namespace std;」と書くことができます。 stl関数、変数、または単にそれらの前にある「std ::」を使用する前に。