我很难在c++.11
上编译g++
这是我面临的问题:
error: 'IGameController' does not name a type.
IGameController
实际上是我的class
接口,我已将位置放在g++
脚本上。
这是我要编译的g++
脚本:
cd C:MinGWbin
g++ -std=c++11 -c c:UsersmeDownloadsTheGameTheGame.cpp
g++ -std=c++11 -Ic:UsersmeDownloadsTheGameGameControllerinc -Ic:UsersmeDownloadsTheGameGameControllersrc -c c:UsersmeDownloadsTheGameGameControllersrcGameController.cpp
g++ -std=c++11 -o c:UsersmeDownloadsTheGameTheGame.exe *.o
我不明白为什么脚本找不到我的头文件
我的项目结构如下:
TheGameTheGame.cpp
TheGameGameControllerincGameControllerProvider.hpp
TheGameGameControllerincIGameController.hpp
TheGameGameControllersrcGameController.cpp
TheGameGameControllersrcGameController.hpp
这是我的源代码:
[TeGame.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;
}
[INameController.hp]
#pragma once
namespace GameController
{
class IGameController
{
public:
virtual void printSomething() = 0;
protected:
IGameController() {}
virtual ~IGameController() {}
};
}
[GameControllerProvider.hp]
#pragma once
namespace GameController { class IGameController; }
namespace GameController
{
namespace GameControllerProvider
{
IGameController& getGameController();
}
}
[GameController.hp]
#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;
}
}
我不熟悉名称空间,但可以肯定的是,您的问题之一是#include
语句,其中您为某些文件提供了错误的路径。
例如,当您从GameController.cpp
(在src/中)调用IGameController.hpp
(在inc/中)时,由于您使用的是quations标记(" "
),因此您应该给出文件的完整路径,并且应该将其写成:
#include "../inc/IGameController.hpp"
希望能有所帮助。