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;
}
}
Hallo Eugene. Das ist nicht das Problem, aber Sie haben Recht, das Include war falsch. Der Fehler bei der Kompilierung bleibt :( – waas1919
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
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