2016-12-16 2 views
1

erkannt Was ich falsch hier?Namespace in Header-Datei deklariert wird, nicht in der Quelldatei wird

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(); 
    } 
} 

Fehler

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  

Beachten Sie, dass mein Namensraum Graphic (deklariert in \ Graphic \ Graphic.h) wird vom Compiler erkannt, obwohl ich es genau so deklariert habe.

+1

'# include "stdafx.h"' muss immer die erste nicht Kommentarzeile sein. Alle darüber liegenden Zeilen werden vom Compiler ignoriert. – drescherjm

+0

Dies muss ein Duplikat sein. – drescherjm

+0

Danke! müssen mehr darüber erfahren, was genau ist das Besondere an '# include ' – stimulate

Antwort

2

stdafx.h (Microsoft vorkompilierte Header) muss oben sein. Dies gilt für jedes Visual C++ - Projekt mit der Option vorcompilierte Header aktiviert und Stdafx.h das Standard-Pch. Dies sind die Standardeinstellungen für ein neues Projekt.

Purpose of stdafx.h

Die einfachste und am wenigsten fehleranfällige Weise die Funktion innerhalb des Namens App zu definieren, ist nur zu ihn dort.

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

Ich stimme mit Jive Sie die Funktion im Namensraum setzen sollte anstatt zu sagen App :: frameLoop(). Es könnte für Leute verwirrend sein und sie denken vielleicht, dass App eine Klasse ist. –

+0

Noch wichtiger ist, wird der Code in der CPP-Datei automatisch Namen die gleiche lösen, wie die H-Datei der Fall ist. Z.B. AppStatus :: Beenden. –

Verwandte Themen