0

コードをコンパイルしようとすると、以下のエラーメッセージが表示されます-

関数'__static_initialization_and_destruction_0':home / user / main.cpp:50:'PhysEng2D :: PhysEng2D(void)'への未定義の参照

50行目の唯一のコードは-

PhysEng2D Physics; 

PhysEng2Dのヘッダーファイルは-

#ifndef _PHYSENG2D_H_ 
#define _PHYSENG2D_H_ 

#include "primitives.h"

class PhysEng2D
{
public:

    PhysEng2D::PhysEng2D(); 
    PhysEng2D::~PhysEng2D();

    bool IsBoundingBoxCollision(PS2Sprite & S1, PS2Sprite & S2); 

    bool IsWallCollision(PS2Sprite & S); 

}; 

#endif

そして、残りのPhysEng2Dの始まりは-

#include "primitives.h"
#include "physeng2d.h" 


PhysEng2D::PhysEng2D()
{
    //Nothing to Initialise 
}

PhysEng2D::~PhysEng2D()
{
    //Nothing to clean up
}

(私はそれらが関連しているとは思わなかったので、私は完全にメソッドを含めませんでした)

申し訳ありませんが、これはおそらく私が作成している非常に愚かな小さなエラーであることを認識しています。

4

3 に答える 3

6

ヘッダーファイルのコンストラクタとデストラクタには、クラスの名前を含めないでください。

変化する

PhysEng2D::PhysEng2D(); 
PhysEng2D::~PhysEng2D();

PhysEndg2D();
~PhysEng2D();

また、.cppに「primitives.h」を再含める必要はありません。

于 2011-05-09T14:48:32.593 に答える
3

各cppファイルをコンパイルしてから、それらをリンクする必要があります。

g++ -c -Wall main.cpp
g++ -c -Wall physeng2d.cpp

g++ -o myapp main.o physeng2d.o

PhysEng2D::また、.hのクラス定義からプレフィックスを削除する必要があります

于 2011-05-09T14:49:19.720 に答える
2

PhysEng2D.oとのリンクを忘れたようですmain.o。またPhysEng2D::PhysEng2D();、構文はクラス定義内では無効です。単に。と言う必要がありますPhysEng2D();

于 2011-05-09T14:47:57.763 に答える