GCC로 게임을 컴파일 할 때 오류가 발생합니다. (오류 : "class Screen"[-fpermissive]에서 "Screen"의 의미 변경)

사용자 1209460

Screen.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

이 두 헤더에 문제가 있습니다. 코드는 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에서 작성한 내 코드가 아닙니다. github의 소스입니다. 레딧에 대한 그의 스레드.

드류 홀

플랫폼 이름은 지정하지 않았지만 X11을 실행하는 Linux의 일부 버전이라고 생각합니다. 그렇다면 X11 / Xlib.h에 정의 된 Screen 구조체와 이름이 충돌 할 가능성이 높습니다. SFML은 거의 확실하게 윈도우 시스템과 상호 작용하기 위해 배후에서 Xlib를 사용하고 있습니다.

Xlib는 C 라이브러리이므로 정의하는 모든 기호는 전역 네임 스페이스에 있습니다. 다행히 C ++에서는 선택한 네임 스페이스에 Screen 클래스를 넣는 옵션이 있습니다. 정규화 된 이름으로 참조하는 한 이름 충돌을 피할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관