2016-04-18 4 views
0

ich mit g++ Kompilation über c++.11 kämpfencompilieren C++ 11 mit g ++ mit Fehlername hat keinen Typ

Hier ist das Problem, das ich bin vor:

error: 'IGameController' does not name a type. 

Die IGameController ist eigentlich mein class Schnittstelle, wo ich den Standort auf meinem g++ Skript gesetzt habe.

Hier ist es mein g++ Skript zu kompilieren:

cd C:\MinGW\bin\ 

g++ -std=c++11 -c c:\Users\me\Downloads\TheGame\TheGame.cpp 
g++ -std=c++11 -Ic:\Users\me\Downloads\TheGame\GameController\inc -Ic:\Users\me\Downloads\TheGame\GameController\src -c c:\Users\me\Downloads\TheGame\GameController\src\GameController.cpp 

g++ -std=c++11 -o c:\Users\me\Downloads\TheGame\TheGame.exe *.o 

Ich verstehe nicht, warum das Skript nicht meine Header-Dateien nicht finden ...

Mein Projekt wie diese aufgebaut ist, :

TheGame\TheGame.cpp 
TheGame\GameController\inc\GameControllerProvider.hpp 
TheGame\GameController\inc\IGameController.hpp 
TheGame\GameController\src\GameController.cpp 
TheGame\GameController\src\GameController.hpp 

Hier ist meine Quellcode:

[TheGame.cpp]

#include <iostream> 
#include "GameController/inc/GameControllerProvider.hpp" 
#include "GameController/inc/IGameController.hpp" 

int main() 
{ 
    GameController::IGameController& gameController = GameController::GameControllerProvider::getGameController(); 
    gameController.printSomething(); 

    return 0; 
} 

[IGameController.hpp]

#pragma once 

namespace GameController 
{ 
class IGameController 
{ 
public: 
    virtual void printSomething() = 0; 

protected: 
    IGameController() {} 
    virtual ~IGameController() {} 
}; 

} 

[GameControllerProvider.hpp]

#pragma once 

namespace GameController { class IGameController; } 

namespace GameController 
{ 

    namespace GameControllerProvider 
    { 
     IGameController& getGameController(); 
    } 

} 

[GameController.hpp]

#pragma once 

#include "GameController/inc/IGameController.hpp" 

namespace GameController 
{ 

class GameController : public IGameController 
{ 
public: 
    GameController(); 
    virtual ~GameController(); 

    void printSomething() override; 
private: 

}; 

} 

[GameController.cpp]

#include <iostream> 
#include "GameController/inc/IGameController.hpp" 
#include "GameController/src/GameController.hpp" 
#include "GameController/inc/GameControllerProvider.hpp" 

namespace GameController 
{ 

GameController::GameController() {} 
GameController::~GameController(){} 

void GameController::printSomething() 
{ 
    std::cout << "printSomething()" << std::endl; 
} 

} 

// Provider 
IGameController& GameControllerProvider::getGameController() 
{ 
    static GameController sGameController; 
    return sGameController; 
} 

} 

Antwort

1

Ich bin nicht vertraut mit Namensräumen, aber sicher eine Ihrer Probleme ist mit den #include Aussagen, wo man einen falschen Weg geben, Einige Dateien.

Zum Beispiel, wenn Sie IGameController.hpp nennen (in inc /) von GameController.cpp (in src /), da Sie quoations Marken (" ") verwenden, sollten Sie den vollständigen Pfad zu der Datei geben, und es soll geschrieben werden :

#include "../inc/IGameController.hpp" 

Hoffe es hilft.

+0

Hallo Eugene. Das ist nicht das Problem, aber Sie haben Recht, das Include war falsch. Der Fehler bei der Kompilierung bleibt :( – waas1919

+0

Ich rate nur, aber vielleicht ist das Problem, dass 'IGameController & GameControllerProvider :: getGameController()' Definition in 'GameController.cpp' außerhalb des Namensraums ist. Könnten Sie versuchen, die Klammer zu verschieben Symbol (}) Schließen Sie den Namespace bis zum Ende der Datei? – EuGENE

+0

eigentlich haben Sie Recht :) Das Problem war, dass ich falsche # include's verwendet habe. Ich dachte, ich müsste jedes Mal den vollen Weg gehen. Aber für Includes, die sich bereits im Ordner befinden, ist es nur der relative Pfad. Ich werde deine Antwort als Korrektor angeben! – waas1919