簡體   English   中英

C ++:循環依賴問題

[英]C++: circular dependency issue

我在循環依賴方面遇到問題,我認為這是錯誤地引入Game類的設計缺陷。

Game.h:

#pragma once
#include <SFML\Graphics.hpp>

#include "GameScreen.h"
#include "TitleScreen.h"

class Game
{
protected:
    sf::RenderWindow window;

    GameScreen* CurrentGameScreen;
    TitleScreen Title;

public:
    Game(void);
    ~Game(void);

    sf::RenderWindow getWindow(void);

    void Run();
    void Close();
};

GameScreen.h:

#pragma once

#include "Game.h"

class GameScreen
{
public:
    GameScreen(void);
    ~GameScreen(void);

    virtual void LoadAllResources() {};
    virtual void DrawScreen(Game* game) {};
    virtual void Update(Game* game) {};
};

TitleScreen.h:

#pragma once
#include <SFML\Graphics.hpp>

#include "GameScreen.h"

class TitleScreen : public virtual GameScreen
{
private:
    sf::Texture title_screen;
    sf::Sprite titleScreen;

    sf::Font font;
    sf::Text menuExit;

public:
    TitleScreen(void);
    ~TitleScreen(void);

    void LoadAllResources();
    void DrawScreen(Game* game);
    void Update(Game* game);
};

然后是主文件:

#include "Game.h"

int main()
{
    Game game;
    game.Run();

    //sf::RenderWindow window(sf::VideoMode(800, 600), "Test");

    //GameScreen* currentScreen;
    //TitleScreen titleScreen;

    //currentScreen = &titleScreen;

    //while (window.isOpen())
    //{
    //  currentScreen->Update(&window);
    //  currentScreen->DrawScreen(&window);
    //}

    return 0;
}

GameScreen.hTitleScreen.h引發了少數C2061 據我了解,這些是由Game.h和Gamescreen.h之間的循環依賴關系引起的。

TitleScreen.h給我錯誤C2504:'GameScreen':未定義基類

Game.h :在第12和13行上,給出C2143:語法錯誤:缺少';' 在'*'之前 ,盡管我不確定這是從哪里來的,並且我的IDE沒有給我任何語法錯誤。

如果我從GameScreen.h中刪除#include語句,並將其替換為前向聲明class Game; (我猜這打破了循環依賴?)上面的大部分內容都已解決,但每次我嘗試訪問a時, TitleScreen.cpp 都會拋出一組C2027C2227C2228未定義的類型 ,-的左側和-的 左側)。游戲對象。 IntelliSense指出不允許使用指向不完整類指針

在介紹Game類之前,我已經開始使用它DrawScreen()Update()將以指向窗口的指針( sf::RenderWindow* window )作為參數。 main.cpp中保留了部分舊代碼。

GameScreen.h您應該聲明Game類而不是包括其整個頭文件,因此:

class Game;

代替:

#include "Game.h"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM