C++ 使用GCC编译游戏时出错。(错误:将”;屏幕和#x201D;的含义从”;类屏幕和#x201D;[-fppermissive]更改)

C++ 使用GCC编译游戏时出错。(错误:将”;屏幕和#x201D;的含义从”;类屏幕和#x201D;[-fppermissive]更改),c++,gcc,compiler-errors,eclipse-cdt,sfml,C++,Gcc,Compiler Errors,Eclipse Cdt,Sfml,屏幕.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&a

屏幕.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
#如果屏幕不可用#
#定义屏幕
#包括
类屏幕
{
公众:
虚拟空心把手输入(sf::RenderWindow&window)=0;
虚拟无效更新(sf::Time delta)=0;
虚拟虚空渲染(sf::RenderWindow&window)=0;
};
#恩迪夫
游戏

#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
\ifndef游戏
#定义游戏
#包括
#包括
#包括
#包括
#包括“Screen.h”
名称空间sfSnake
{
班级游戏
{
公众:
游戏();
无效运行();
void handleInput();
无效更新(sf::时间增量);
void render();
静态常数int Width=640;
静态常数int高度=480;
静态标准::共享ptr屏幕;
私人:
sf::渲染窗口;
音乐背景音乐;
静态常量sf::Time-TimePerFrame;
};
}
#恩迪夫
我对这两个标题有问题。该代码在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
描述资源路径位置类型
错误:将“Screen”的含义从“class Screen”[-fppermissive]Screen.h/Snake行6 C/C++问题更改为“Screen”
错误:声明“std::shared\u ptr sfSnake::Game::Screen”[-fppermissive]Game.h/Snake行28 C/C++问题
我已经四处寻找了一段时间,还没有找到解决办法。我真的很失落。。。
此外,这不是我的代码,它是由用户“jh1997sa”在reddit上编写的

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


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

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

Screen
既是类的名称,也是
共享的\u ptr
Screen
的名称。你试过如果你重新命名它会发生什么吗?嗯,
静态共享屏幕
只是一个糟糕的设计,在设计良好的软件中,你不应该有名称冲突的机会。