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] 삭제
몇 마디 만하겠습니다