【问题标题】:Error C2061 In visual studioVisual Studio 中的错误 C2061
【发布时间】:2013-01-26 20:20:01
【问题描述】:

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

#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 Type 是在 Figure.h 之外声明的,或者它是私有的而不是公共的。

错误报告

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

错误 3 错误 C2653: 'Figure' : 不是类或命名空间名称 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

【问题讨论】:

  • 你认为Figure:: 在做什么?你认为Figure 是命名空间吗?一种?或者是其他东西? (当我不知道你的推理是什么时,很难纠正你的误解。)
  • 对不起,Figure.h 包含一个名为 Figure 的类声明。我认为 Figure:: 是一种引用它的方式。
  • 请包含整个错误消息。该消息是对问题所在和位置的解释。
  • 我已经添加了您应该需要的所有代码和错误报告。
  • @DavidSchwartz:Figure 是一个类类型。你错了。 OP 的语法和理解是 100% 正确的。

标签: c++


【解决方案1】:

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

【讨论】:

  • +1 因为您的解决方案更具体——我没有发现甚至不需要依赖项
  • 谢谢!我有更多关于前向依赖的问题,但我将开始一个新线程,因为它们与本次讨论无关。
【解决方案2】:

你的语法很好。

不好的是您的标头之间存在循环依赖关系,这破坏了您的#includes。

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

没有循环依赖。尽可能使用forward declarations 来帮助您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多