gpt4 book ai didi

c++ - 使用GCC编译游戏时出现错误。 (错误: changes meaning of ”Screen” from ”class Screen” [-fpermissive])

转载 作者:行者123 更新时间:2023-12-02 11:09:26 25 4
gpt4 key购买 nike

屏幕

#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

我对这两个标题有疑问。该代码在Visual Studio中可以正常编译,但在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

我已经环顾了一阵子了,还没有找到解决方案。我真的很失落...
这也不是我的代码,它是用户'jh1997sa'在reddit上编写的。 The source on github. His thread on reddit.

最佳答案

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

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

关于c++ - 使用GCC编译游戏时出现错误。 (错误: changes meaning of ”Screen” from ”class Screen” [-fpermissive]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com