首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有错误的C++.11编译g++不会命名类型

使用带有错误的C++.11编译g++不会命名类型
EN

Stack Overflow用户
提问于 2016-04-18 13:33:41
回答 1查看 374关注 0票数 0

我正在为g++编译在c++.11上挣扎

以下是我面临的问题:

代码语言:javascript
复制
error: 'IGameController' does not name a type.

IGameController实际上是我的class接口,我已经将位置放在了g++脚本上。

这里是我要编译的g++脚本:

代码语言:javascript
复制
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

我不明白为什么脚本找不到我的头文件.

我的项目结构如下:

代码语言:javascript
复制
TheGame\TheGame.cpp
TheGame\GameController\inc\GameControllerProvider.hpp
TheGame\GameController\inc\IGameController.hpp
TheGame\GameController\src\GameController.cpp
TheGame\GameController\src\GameController.hpp

这是我的源代码:

TheGame.cpp

代码语言:javascript
复制
#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

代码语言:javascript
复制
#pragma once

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

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

}

GameControllerProvider.hpp

代码语言:javascript
复制
#pragma once

namespace GameController { class IGameController; }

namespace GameController
{

    namespace GameControllerProvider
    {
       IGameController& getGameController();
    }

}

GameController.hpp

代码语言:javascript
复制
#pragma once

#include "GameController/inc/IGameController.hpp"

namespace GameController
{

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

    void printSomething() override;
private:

};

}

GameController.cpp

代码语言:javascript
复制
#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;
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 13:53:52

我不熟悉名称空间,但您肯定有一个问题是使用#include语句,在这些语句中,您给出了一些文件的错误路径。

例如,当您从IGameController.hpp ( inc/) (在src/中)调用GameController.cpp (inc/)时,由于您使用的是商标记(" "),您应该给出文件的完整路径,它应该写成:

代码语言:javascript
复制
#include "../inc/IGameController.hpp"

希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36695554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档