错误:'某个类'没有命名类型。如何解决这个问题?

时间:2017-05-23 16:31:14

标签: c++ codeblocks

困倦的程序员(自我评价)需要帮助

#ifndef GAME_H
#define GAME_H
#include <iostream>
#include "snake.h"
#include "food.h"
#define MAX_WIDTH 20
#define MAX_HEIGHT 20

class game
{
    public:
        game();
        static void createBoard();
        int gameStart();
        bool gameChecker();

    protected:
        food apple;
        bool gameOver = false;
        snake python;
        int gameSpeed = 250;

    private:
};

#endif // GAME_H

以上是名为 game.h

的头文件

每当我尝试编译项目时,它会显示错误,上面写着“错误:'食物'没有命名类型

其中食物是另一类,我也包含在此头文件中

#include 'food.h'

但仍然存在错误。我也试过在游戏的.cpp文件中包含 food.h ,但仍然没有希望。

这是food.h文件以备不时之需

#ifndef FOOD_H
#define FOOD_H
#include "game.h"
#include "snakeFragment.h"
#include <stdlib.h>
#include <time.h>

class food: public snakeFragment
{
    public:
        food();
        int foodPlace();
        int printFood();

    protected:
        char symbol = '*';

    private:
};

#endif // FOOD_H

我正在使用Code :: blocks。

我做过的事情

  1. 重新分析项目

  2. 重建整个项目

  3. 再次重写课程

  4. 重新启动笔记本电脑

  5. 重新启动Code :: blocks

  6. 在编译器设置中提供路径 - &gt;搜索目录

  7. 但没有效果。我不知道是什么问题?

    提前致谢

1 个答案:

答案 0 :(得分:0)

你有一个循环依赖。食物包括游戏和游戏包括食物。

由于您已经正确使用了标题保护,而不是无限地互相包含,所以只能将其包含在另一个之前。事实上,游戏的定义首先被包括在内,所以它并不知道食物是一种类型。

解决方案:没有循环依赖关系。食品类似乎没有使用游戏中的任何东西,所以这应该很容易实现。

  

但是game.h中有一些宏

然后将标题分成小块,这样食物就不再依赖于依赖食物的任何标题。