" {'之前的预期课程名称令牌"和"无效使用不完整类型的类CentralClass'"

时间:2017-02-22 00:07:08

标签: c++

我正在重写lazyfoo.net上的鼠标输入教程,以使用header和cpp文件,而不是将所有内容放在一个cpp文件中。我这样做只是为了练习。我正在运行Windows 10,我在戴尔笔记本电脑上使用Code :: Blocks 16.01。

当我编译以下源代码时,我收到一条错误消息,其中显示" {' {'令牌"在我的ltexture.h文件中。我已经尝试在我的ltexture.h文件中声明CentralClass,当我这样做时,我收到一条错误消息,说明"无效使用不完整类型'类CentralClass'"。我也在这个网站上查了几个相同问题的答案,但似乎没什么用。

这是代码。

ltexture.h

    #ifndef LTEXTURE_H_INCLUDED
#define LTEXTURE_H_INCLUDED

#include <string>
#include "central_class.h"

class LTexture : public CentralClass
{
    // The actual hardware texture
    SDL_Texture *mTexture;

    // Image dimensions
    int mWidth;
    int mHeight;

public:
    // Initialize variables
    LTexture();

    // Deallocates memory
    ~LTexture();

    // Loads image at specified path
    bool loadFromFile(std::string path);

    // Deallocates texture
    void free();

    // Renders texture at given point
    void render(int x, int y, SDL_Rect *clip = nullptr, double angle = 0, SDL_Point *center = nullptr, SDL_RendererFlip flip = SDL_FLIP_NONE);

    // Gets image dimensions
    int getWidth() {return mWidth;}
    int getHeight() {return mHeight;}
};

#endif // LTEXTURE_H_INCLUDED

central_class.h

    #ifndef CENTRAL_CLASS_H_INCLUDED
#define CENTRAL_CLASS_H_INCLUDED

#include <SDL.h>
#include "lButtonSprite.h"
#include "lbutton.h"
#include "ltexture.h"
#include "global.h"

class CentralClass
{
    // The window we'll be rendering to
    SDL_Window *mWindow;

    // Button objects
    LButton mButtons[global::TOTAL_BUTTONS];

protected:
    // The window renderer
    SDL_Renderer *mRenderer;

    // Mouse button sprites
    SDL_Rect mSpriteClips[button::TOTAL];
    LTexture mButtonSpriteSheetTexture;

public:
    // Call all functions
    CentralClass();

    // Starts up SDL and creates window
    bool init();

    // Loads media
    bool loadMedia();

    // Main part of the program
    void mainLoop();

    // Frees media and shuts down SDL
    void close();

    // Clean up
    ~CentralClass();
};

#endif // CENTRAL_CLASS_H_INCLUDED

这两个类都依赖于彼此。请帮助摆脱这些错误。我不知道该怎么做。输入代码

1 个答案:

答案 0 :(得分:0)

两个文件都包含另一个文件,这会导致无限循环(这是#define禁止的。)

无论哪种方式,其中一个错过了另一个的类定义。解决这个问题的唯一方法是转发声明

要解决此问题,请在其中一个(或两个)文件中输入class xxx;,分别引用另一个类。

此外,结构中存在逻辑错误,因为类1包含类2的对象,类2从类1派生(因此它包含类1的对象)。显然,一个类不能包含自身的对象;这将是无限的递归定义。我假设另一个内部的类应该是对象的指针,而不是对象。