2013-05-31 17 views
5

私はこの質問をしています。なぜCoutがスローされるのですかC++は宣言されていない識別子を返します

error C2065: 'cout' : undeclared identifier 

私はIDEとしてVisual Studio 2012を使用しており、学校プロジェクトを作成しています。私は例のファイルを除いてすべてを完了しました。だから私は、このような画面上で何かを記述しようとしています:

#include "iostream" 
#include "stdafx.h" 
using namespace std; 

int main() 
{ 
    cout<<"example"; 

    return 0; 
} 

だから、問題はCOUTである... printf関数が正常に動作しますが、私はCOUTを使用したいです。

編集: 私は ""を<に変更しましたが、役に立たないです。また、私はこのコードを例として使用しています...これはプロジェクト全体ではありません。

+0

'' –

+0

の#includeを試してみて、 'のstd :: cout'を使用するか、または名前空間を使用して参照してください。 – Dirk

+4

私はプリコンパイルされたヘッダーがソースの最初の行でなければならないと思います。 – chris

答えて

12

stdafx.hは、ソースファイルの最初のインクルードディレクティブになります。

ファイルを切り替え、2番目のインクルードを<>に変換します(他の方法も同様です)。

#include "stdafx.h" 
#include <iostream> 

詳細については、this postを参照してください。

+1

thx、私は自分でそれを見つけましたが、あなたは実際の修正を行った唯一の人です:D:D – Dekay

+0

@ user2440586、公正であるように、標準のヘッダーを含めるときは角かっこを使用する方がはるかに優れています。 – chris

11

まず第一に:

#include <iostream> 

代わりの#include "iostream"

第二に、一般的に、ほとんどのコースはそれと開始にもかかわらず、using namespace std;を書くために悪い習慣を考えられています。

using std::cout;

+2

"Secondly"の必要はありません。彼はすでに "using namespace std;"を使用しています。 – Tik0

+2

おっと、私の悪い...削除したこと –

+0

質問は、失敗したときに<>のような検索をすると失敗するのです。 – chris

4
#include "iostream" 

はこのポストからの引用

#include <iostream> 

する必要があります:あなたが実際にあなたのケースでは、必要なものを使用することをお勧めしますのご好意により、difference-between-iostream-and-iostream-quotes-in-include

@ジェリー・コフィンの答え:

<>を使用すると、コンパイラはヘッダーのシステム指定のディレクトリ/ディレクトリ(インクルード環境変数で設定したもの)だけを検索します。

""を使用すると、コンパイラはローカルディレクトリを最初に検索し、失敗した場合は<>と同じように再検索します。技術的には(つまり、標準に従って)、「ローカル」ディレクトリである必要はありませんが、それは基本的にどのコンパイラでも動作します。

EDIT:

しかし、根本的な原因はstdafx.hがプリコンパイル済みヘッダーであることです。コンパイルオプション/Yu'stdafx.h'が(デフォルトでは)チェックされていない限り、Visual C++はソースファイルの#include "stdafx.h"の前に何もコンパイルしません。その行までのソース内のすべてのコードが既にコンパイルされているものとみなします。ただし、<>iostreamと併用することは、コードの読者を混乱させないようにしてください。

+1

私が見ている問題は、あなたがあなたの答えを引用に矛盾することです。私のお金はPCHの問題です。 – chris

+0

@chris私は最後の文章「しかし、それは私が知っている本質的にどのコンパイラでもうまくいく」と答えています。見積もりが適切でない場合は、私を修正してください。ありがとう! – taocp

+0

'#include" name "は実装定義の方法で' #include 'に落ちる前に検索しますが、正気なコンパイラはすべてローカルディレクトリを探します。 – chris

1

#include <iostream>を「012」の代わりに「<」と使用すると効果があります。今のところ、コンパイラはiostreamライブラリの場所を知りません。

また、新しい行の場合は、cout<<"example";cout<<"example"<<endl;に変更して正しくフォーマットすることができます。

+2

新しい行を追加することをアドバイスしているだけの場合は、 '<< '\ n';'という行を追加するように伝えてください。フラッシュするようにアドバイスしている場合は、それを明確に指摘する必要があります。 – BoBTFish

関連する問題