2017-12-21 8 views
-1

나는 SFML을 스스로 가르치려고 노력해 왔습니다. 최근에 나는이 튜토리얼을 따라 갔다 : http://gamecodeschool.com/sfml/building-a-simple-game-engine-in-c-plus-plus/ 작은 탁구 게임을 만들기. 첫 번째 시도는 내가 모든 것을 통해 읽기 및 코드와 함께 다음과 같은 방망이와 공을 위해 점점 오류를 유지 :SFML 정의되지 않은 'Bat :: Bat (float, float)'에 대한 참조

main.cxx:(.text+0x11e): undefined reference to `Bat::Bat(float, float)' 

내가 다시 통해 가서 일을 해결하려 옆에 코드 측면을 비교, 심지어 각 파일을 다시 작성합니다. 그러나, 나는 여전히 같은 오류가 점점 계속 :

main.cxx:(.text+0x11e): undefined reference to `Bat::Bat(float, float)' 
main.cxx:(.text+0x11e): undefined reference to `Bat::Bat(float, float)' 
main.cxx:(.text+0x279): undefined reference to `Bat::moveLeft()' 

내가 정의되지 않은 참조가 오브젝트 파일 및 라이브러리의 모든 통해 볼 때 링커가 정의를 발견 할 수 없다는 것을 이해합니다. 그러나 나는 C++로 잠시 일 해본 적이 없으며 솔직히 내가 잘못 될 곳을 찾을 수없는 것 같습니다.

내 현재 환경은 Debian 9의 Geany IDE입니다. 모든 헤더 파일과 구현 파일은 같은 폴더에 있습니다. 코드는 위의 링크에있는 자습서의 코드와 동일합니다.

ifndef BAT_H 
#define BAT_H 
#include <SFML/Graphics.hpp> 
using namespace sf; 

class Bat 
{ 
private: 
    Vector2f position; 

    // A RectangleShape object 
    RectangleShape batShape; 

    float batSpeed = .3f; 

public: 
    Bat(float startX, float startY); 

    FloatRect getPosition(); 

    RectangleShape getShape(); 

    void moveLeft(); 

    void moveRight(); 

    void update(); 

}; 
#endif 

사람이 올바른 방향으로 날 지점 또는 아마도 내가 뭘 잘못 말해 줄 수 : 예를 들어, 여기 내 Bat.h 파일은? 나는 정말로 감사 할 것입니다.

감사합니다.

+0

글쎄, 우리는 선언을 볼 수 있습니다. 그 정의는 어떻습니까? 또한 대응하는 cpp 파일 (Bat.cxx 나는 추정합니까?)을 컴파일하고 실행 파일을 만들었을 때 연결 했습니까? 어쩌면 cpp 파일이 프로젝트에 올바르게 추가되지 않았거나 IDE가 실행 파일을 빌드하는 데 사용 된 소스 파일 컬렉션을 참조하는 데 사용 된 이름이 무엇입니까? 이 정보로는 알기가 약간 어렵습니다. (btw, 첫 줄에는 #가 빠졌지 만 원래 파일에 있다고 가정합니다. 그렇지 않으면 분명히 명백한 오류가 나타납니다) – Caninonos

+0

해당하는 모든 cpp 파일을 컴파일했지만 문제가 없습니다. 그것은 단지 내가하려고하는 오류입니다. – Nikita

+0

IDE를 사용하는 대신 잊어 버리지 않도록 Makefile을 직접 작성하려 했습니까? 허락하신다면 지루 하긴하지만 적어도 문제가 발생하는 곳을보기가 더 쉽습니다. 또는, "g ++ [모든 cpp 파일] -lsfml-system -lsfml-graphics -lsfml-windows -L [sfml 라이브러리가있는 경로] -I [sfml 헤더가있는 경로]"를 입력하십시오. 터미널 작동합니까? 소스 파일에있는 것보다 빌드 프로세스와 관련이 있다고 생각합니다. 그러나 실제로 가지고있는 것과 몰랐던 것을 알지 못해서는 말하기가 정말 어렵습니다. – Caninonos

답변

0

Bat 생성자 및 moveLeft 메서드에 대한 코드를 링커에서 찾을 수 없습니다. 대부분의 원인은 Bat.cpp 파일을 빌드에 포함시키지 않았거나 cpp 파일의 헤더 파일에있는 것과 다른 서명을 갖고 있다는 것입니다.

확인한 후에도 원인을 찾을 수없는 경우 여기에 cpp 파일을 게시하십시오.

관련 문제