2017-12-21 27 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です。すべてのヘッダファイルと実装ファイルは同じフォルダにあります。コードは上記のリンクのチュートリアルとまったく同じです。たとえば、ここに私のBat.hファイルです:

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 

は、誰かが正しい方向に私を指すか、多分私が間違っているのを教えすることはできますか?とても感謝しております。

ありがとうございました。

+0

私たちは宣言を見ることができます。定義はどうですか?対応するcppファイル(Bat.cxxは私が推測しますか?)をコンパイルして、実行ファイルを作成したときにリンクしましたか?おそらく、cppファイルがプロジェクトに正しく追加されていないか(または、実行可能ファイルのビルドに使用されたソースファイルのコレクションを参照するためにIDEで使用されている名前)これらの情報を伝えるのは少し難しいです。 (btw、最初の行に#がありませんが、それは元のファイルにあると仮定します。そうでなければかなり明白なエラーになります) – Caninonos

+0

対応するすべてのcppファイルをコンパイルしましたが問題ありません。ビルドしようとするときだけ、私が言及しているそのエラーが出ますか? – Nikita

+0

自分のMakefileを書いて、IDEを使わずに何かを忘れていないことを確認しましたか?確かに、それはもっと面倒ですが、少なくとも問題がどこで起こるかを知ることは簡単です。代わりに、 "g ++ [すべてのcppファイル] -lsfml-system -lsfml-graphics -lsfml-windows -L [あなたのsfmlライブラリがある場所へのパス] -I [あなたのsfmlヘッダーがある場所へのパス]"と入力します。ターミナルは機能しますか? ソースファイルにあるものよりも、ビルドプロセスと関連があると思いますが、あなたが持っているものと実行したことを正確に知らなくても、本当に分かりにくいです。 – Caninonos

答えて

0

リンカーはBatコンストラクタとmoveLeftメソッドのコードを見つけることができません。おそらく、Bat.cppファイルをビルドに含めなかったか、またはcppファイルのヘッダーファイルのものとは異なるこれらのメソッドのシグネチャが異なっている可能性があります。

これをチェックしても原因を見つけることができない場合は、ここにもcppファイルを投稿してください。

関連する問題