该代码可以正常运行
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
之类的事情以及使我的命名空间函数内联可以阻止这种问题。