4

我尝试在我的代码中引用另一个类的结构,它给了我一个错误,说我有语法问题。

#pragma once

#include "Definitions.h"

#include "GV.h"
#include "UI.h"
#include "Tile.h"
#include "Item.h"

class Figure {
public:
    //Figure index
    struct FIGURE_TYPE {
        //Where to crop the image from
        SDL_Rect crop;
        int x;
        int y;
    };

    //The game figure
    FIGURE_TYPE figure_index[FIGURE_COUNT];

    //The figure array
    int figure_array[MAP_HEIGHT / 64][MAP_WIDTH / 64];

    //Functions
    Figure ( void );
    bool draw_figures ( SDL_Surface* screen, SDL_Surface* figures, SDL_Rect camera, Figure::FIGURE_TYPE figure_spec[FIGURE_COUNT] );
};

这就是Figure.h中的结构,

#pragma once

#include "Definitions.h"

#include "GV.h"
#include "Tile.h"
#include "Item.h"
#include "Figure.h"

class UI {
public:
    UI ( void );
    void set_camera ( SDL_Rect& camera, Figure::FIGURE_TYPE figure_spec[FIGURE_COUNT] );
    bool draw_map ( SDL_Surface* screen, SDL_Rect& camera, SDL_Surface* tiles, SDL_Surface* figures, Figure::FIGURE_TYPE figure_spec[FIGURE_COUNT] );
    bool draw_status ( void );
};

这就是我从另一个名为 UI.h 的头文件中引用它的地方。我知道引用结构存在问题,我只是不知道如何解决它。很简单的问题,有大神帮忙吗?

问题在于 Figure 类型是在 Figure.h 之外声明的,或者它是私有的而不是公共的。

错误报告

错误 1 ​​error C2653: 'Figure' : is not a class or namespace name c:\users\jim\documents\c++\roguelike\roguelike\ui.h 13 1 roguelike

错误 3 error C2653: 'Figure' : is not a class or namespace name c:\users\jim\documents\c++\roguelike\roguelike\ui.h 14 1 roguelike

错误 2 错误 C2061:语法错误:标识符 'FIGURE_TYPE' c:\users\jim\documents\c++\roguelike\roguelike\ui.h 13 1 roguelike

错误 4 错误 C2061:语法错误:标识符 'FIGURE_TYPE' c:\users\jim\documents\c++\roguelike\roguelike\ui.h 14 1 roguelike

4

2 回答 2

13

你有一个循环依赖:UI.h 依赖于 Figure.h,Figure.h 依赖于 UI.h。您需要通过删除#include另一个文件中的一个文件来打破循环依赖关系。在这种情况下,由于我在 Figure.h 中没有看到使用 UI.h 中的任何内容的任何内容,因此您应该#include "UI.h"从 Figure.h 中删除并进行所有设置。

于 2013-01-26T20:35:53.963 回答
1

你的语法很好。

不好的是您的标头之间存在循环依赖关系,这会破坏您#include的 s.

在这种情况下,它会导致Figure在“UI.h”中不可见;即使您的语法是正确的,这也会导致您看到的错误,因为“UI.h”不知道您的语法是否正确,因为它不知道是什么Figure

没有循环依赖。尽可能使用前向声明来帮助您。

于 2013-01-26T20:36:02.107 回答