首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >头文件混淆

头文件混淆
EN

Stack Overflow用户
提问于 2014-01-18 21:24:31
回答 1查看 115关注 0票数 0

我是一个相当新的程序员,我正在Visual / C++ / SDL中做一个小游戏项目。所以我的代码如下所示:

原型h:

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

功能h:

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

据我所知,这是完全正确的,至少根据的解释。即使我在IDE中的函数.h文件中的“循环”上按下鼠标,也会弹出正确的工具提示'struct循环‘。但是,当我编译时,我得到了引用函数的错误‘未声明的标识符’循环‘。

怎么回事..?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-18 21:29:28

您目前有一个圆形的包含。H包括函数.h和函数.h包括原型.h

现在,如果您正在编译一个cpp文件,那么首先调用prototype.h .h,第二行将包含functions.h的内容,这将在它的实际定义之前放置一个对循环结构的引用。

在您的示例中,如果functions.h包含prototype.h. h中定义的结构上的函数,则不应该有任何理由将包含在prototype.h .h中的 functions.h。如果您管理头文件之间的依赖项,您的代码将更容易管理。

就你而言:

  • H依赖于原型,必须包含它
  • H不能包含函数.h

而且,通常需要将类/struct及其所有函数保存在一个头文件中。除非文件变得太大,否则可以将函数拆分为多个标头。

注意:强力解决方案可以是在使用函数之前将前向申报添加到struct循环中,但是,我只在无法避免的情况下才保留这种解决方案

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

https://stackoverflow.com/questions/21210069

复制
相关文章

相似问题

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