2016-12-16 4 views
1

ここで何が間違っていますか?ヘッダーファイルで宣言されている名前空間がソースファイル内で認識されません

APP.h

#pragma once 

namespace App{ 

    enum class AppStatus{ 
    Exit, 
    Menu, 
    Run 
    }; 

    void frameLoop(); 

    AppStatus state; 

} 

App.cpp

#include "App.h" 
#include "stdafx.h" 
#include <Graphic\Graphic.h> 


void App::frameLoop() 
{ 
    while (state != AppStatus::Exit) { 

     Graphic::renderingSequence(); 
    } 
} 

エラー

Error C2653 'App': is not a class or namespace name App 
Error C2065 'state': undeclared identifier App 
Error C2653 'AppStatus': is not a class or namespace name App 
Error C2065 'Exit': undeclared identifier App  

注意私の名前空間います(\ Graphic \ Graphic.hで宣言されている)は、私が同じ方法で宣言したとしても、コンパイラによって認識されています。

+1

'の#include "stdafx.hをは"'常に最初の非コメント行にする必要があります。その上にあるすべての行は、コンパイラによって無視されます。 – drescherjm

+0

これは重複している必要があります。 – drescherjm

+0

ありがとう! '#include ' – stimulate

答えて

2

stdafx.h(マイクロソフトのプリコンパイル済みヘッダー)が先頭になければなりません。これは、プリコンパイルされたヘッダーオプションがオンで、stdafx.hが標準のpchであるすべてのVisual C++プロジェクトに適用されます。これらは新しいプロジェクトのデフォルト設定です。

Purpose of stdafx.h

名前空間のApp内の関数を定義するための最も簡単でエラーが発生しやすい方法が がそれを置くだけです。

APP.CPP

#include "stdafx.h" // Nothing goes above this 
#include "App.h" 
#include <Graphic\Graphic.h> 

namespace App { 
    void frameLoop() 
    { 
     while (state != AppStatus::Exit) { 
      Graphic::renderingSequence(); 
     } 
    } 
} 
+0

私はJiveに同意します.App :: frameLoop()というより、ネームスペースに関数を置くべきです。人々にとっては混乱するかもしれませんし、Appがクラスだと思うかもしれません。 –

+0

さらに重要なことに、cppファイル内のコードは.hファイルと同じ名前を自動的に解決します。例えば。 AppStatus :: Exit。 –

関連する問題