重新排列#includes的奇怪问题

时间:2019-03-31 21:23:59

标签: c++

该代码可以正常运行

Game.h

#pragma once
#include <iostream>
#include <string>
#include "util.h"

class Game {
private:

public:
    void startGame();
};

Game.cpp

#include "util.h"
#include "Game.h"

void Game::startGame() {
    std::cout << "Game started!" << std::endl;
}

util.h

#pragma once

#include <string>
#include <iostream>
#include "Game.h"

namespace util {

    inline void functionToTakeGameReference(Game& game) {
        game.startGame();
    }
}

main.cpp

#include <iostream>
#include <string>
#include "util.h"
#include "Game.h"

int main()
{ 

    Game g;
    util::functionToTakeGameReference(g);

    system("pause");
    return 0;
}

游戏开始的消息可以正常打印。但是,当我转到Game.cpp并翻转包含文件并将#include util.h放在#include Game.h下方时,我的util.h文件中出现错误,例如:

  

仅在函数声明上允许使用内联说明符

     

不允许使用不完整的类型

     

期望一个;

     

位于util名称空间中唯一函数的标题上

我认为所有这些只是隐藏问题中的bs错误。我知道以错误的顺序包含标题会带来一些危险,但我从来没有真正理解过它们。我还认为诸如#pragma once之类的事情以及使我的命名空间函数内联可以阻止这种问题。

0 个答案:

没有答案