我是一个相当新的程序员,我正在使用Visual Studio / C ++ / SDL制作一个小型游戏项目。所以我的代码布局如下:
prototypes.h:
#ifndef PROTOTYPES_H
#define PROTOTYPES_H
#include "constants.h"
#include "globals.h"
#include "functions.h"
struct circle
{
float x;
float y;
int r;
};
//other class declarations
#endif PROTOTYPES_H
functions.h:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include "SDL_header.h"
#include "prototypes.h"
bool check_collision(circle circle, SDL_Rect rect);
//other function declarations
#endif FUNCTIONS_H
至于根据this的解释,到目前为止,我所知道的是完全正确的。 即使我将鼠标移到IDE中的functions.h文件中的'circle',我也会弹出正确的工具提示'struct circle'。但是当我编译时,我在引用functions.h ...
时得到错误'未声明的标识符'圈'' 怎么了??答案 0 :(得分:1)
您目前有一个循环包含。 Prototype.h包含functions.h,functions.h包含prototype.h
现在如果你正在编译调用一个CPP文件prototype.h第一第二行包括functions.h的内容,这将使实际定义之前圆结构的引用。
在您的情况下,如果functions.h包括关于prototype.h定义的结构功能不应该有任何理由为包含从prototype.h functions.h。 如果您管理头文件之间的依赖关系,您的代码将更容易管理..
在你的情况下:
此外,通常值得将类/结构及其所有函数保存在单个头文件中。除非文件变得太大,否则你可以将它分成多个标题。
注:蛮力解决方案可以只是其functions.h使用前添加一个正向减速结构圈子,但是我会只为他们真的无法避免的情况下保留这样的解决方案