使用GCC编译游戏时出错.(错误:将"Screen"的含义从"class Screen&q

Getting errors when compiling game with GCC. (error: changes meaning of ”Screen” from ”class Screen” [-fpermissive])

本文关键字:quot Screen class 游戏 编译 GCC 出错 错误 使用      更新时间:2023-10-16

屏幕.h

#ifndef SCREEN_H
#define SCREEN_H
#include <SFML/Graphics.hpp>
class Screen
{
public:
    virtual void handleInput(sf::RenderWindow& window) = 0;
    virtual void update(sf::Time delta) = 0;
    virtual void render(sf::RenderWindow& window) = 0;
};
#endif

Game.h

#ifndef GAME_H
#define GAME_H
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <vector>
#include <memory>
#include "Screen.h"
namespace sfSnake
{
class Game
{
public:
    Game();
    void run();
    void handleInput();
    void update(sf::Time delta);
    void render();
    static const int Width = 640;
    static const int Height = 480;
    static std::shared_ptr<Screen> Screen;
private:
    sf::RenderWindow window_;
    sf::Music bgMusic_;
    static const sf::Time TimePerFrame;
};
}

#endif

我对这两个标题有意见。代码在visualstudio中编译得很好,但在GCC中编译不好。

我得到错误:

Description Resource    Path    Location    Type
error: changes meaning of ”Screen” from ”class Screen” [-fpermissive]   Screen.h    /Snake  line 6  C/C++ Problem
error: declaration of ”std::shared_ptr<Screen> sfSnake::Game::Screen” [-fpermissive]    Game.h  /Snake  line 28 C/C++ Problem

我四处寻找了一段时间,还没有找到解决办法。我真的很失落。。。此外,这不是我的代码,它是由reddit上的用户"jh1997sa"编写的。github上的源代码。他在reddit上的帖子。

您还没有命名您的平台,但我认为这是运行X11的Linux的某种风格。如果是这样的话,这很可能是与X11/Xlib.h中定义的Screen结构的名称冲突。几乎可以肯定,SFML在幕后使用Xlib与窗口系统交互。

因为Xlib是一个C库,所以它定义的所有符号都位于全局命名空间中。幸运的是,在C++中,您可以选择将Screen类放在自己选择的命名空间中。只要用它的完全限定名称来引用它,就可以避免名称冲突。

据我所知,如果你试图在linux系统上编译,你应该使用g++而不是gcc进行编译。