2012-01-29 14 views
-1

は、私は次のようなクラスを作成したC++クラスmain.cppを持っている:C++コンパイルエラー:(関数パラメータのための)未定義の識別子

class MapSearchNode 
{ 
public: 
unsigned int x; // the (x,y) positions of the node 
unsigned int y; 

MapSearchNode() { x = y = 0; } 
MapSearchNode(unsigned int px, unsigned int py) { x=px; y=py; } 

float goalDistance(MapSearchNode &nodeGoal); 

}; 
float MapSearchNode::goalDistance(MapSearchNode &nodeGoal) 
{ 
float xd = fabs(float(((float)x - (float)nodeGoal.x))); 
float yd = fabs(float(((float)y - (float)nodeGoal.y))); 

return xd + yd; 
} 

int main{ 
    //treatment 
} 

をそして、それが正常に動作しますが、その後、私は区切るたかったですMyClassクラス、私はMyClass.hとMyClass.cppを作成し、以下のようなコードを区切り:

MyClass.h

#ifndef _MAPSEARCHNODE_H 
#define _MAPSEARCHNODE_H 


class MapSearchNode 
{ 
public: 
    MapSearchNode(); 
MapSearchNode(unsigned int px, unsigned int py); 

public: 
unsigned int x; 
unsigned int y; 
    float goalDistance(MapSearchNode &goalNode); 

}; 
#endif 

MyClass.cpp

#include "MapSearchNode.h" 

MapSearchNode::MapSearchNode():x(0), y(0)) 
{} 
MapSearchNode::MapSearchNode(unsigned int px, unsigned int py):x(px), y(py) 
{} 

float MapSearchNode::goalDistance(MapSearchNode &goalNode){ 
float xDistance = fabs(float(((float)x - (float)goalNode.x))); 
float yDistance = fabs(float(((float)y - (float)goalNode.y))); 

return xDistance + yDistance; 
} 

バール私はエラーを持ってコンパイルしよう:

Undefined identifier goalNode; 
//for the function goalDistance 

誰かが、なぜ私はこのエラーを取得し、どのようにそれを修正することになっている私に説明していただけます。

編集:今は何も忘れていないことを願っています。

EDIT: 降格者には大変感謝しています。私たちの中には、あなたのようなエキスパートがいない人もいますし、小さな人でもエラーを見るのは難しいです!

最も明白な1:

+0

float MyClass :: Calculate(MyCass&myClass) - MyCassはMyClassである必要がありますか? – diggingforfire

+0

あなたのスペルを確認してください... –

+0

@diggingforfireええ、ごめんなさい – Anila

答えて

0

は初見では、このエラーの2つの理由が考えられ あなたのクラス定義が不完全である、それはまた

class MyClass 
{ 
public: 
    unsigned int x; 
    unsigned int y; 

    MyClass() { x = y = 0; } 
    MyClass(unsigned int px, unsigned int py) { x=px; y=py; } 

    float Calculate(MyClass &myClass); 
}; // semicolon 

float MyClass::Calculate(MyClass &myClass) 
{ 
    if(x<myClass.x) 
      ....//treatment 
} 

する必要があり、必ずあなたのソースファイルを作成します(.CPPは)だから、両方のファイルがそのようになり、あなたのヘッダファイル( .H)

が含まれています

// .h file 
class MyClass 
{ 
public: 
    unsigned int x; 
    unsigned int y; 

    MyClass() { x = y = 0; } 
    MyClass(unsigned int px, unsigned int py) { x=px; y=py; } 

    float Calculate(MyClass &myClass); 
}; 

// .cpp file 
#include "MyClass.h" 
//definition of constructors 
float MyClass::Calculate(MyClass &myClass) 
{ 
    if(x<myClass.x) 
      ....//treatment 

} 
+0

私は自分の投稿を編集し、実際のコードを追加しました。私はこれらの両方を行っています。 – Anila

+0

@Anila Iveはここでコードをテストし、完璧に動作します。「マップ」変数と同じように、コード全体を投稿したことはありませんか? – poitroae

+0

私はそれが本当に長いので、いくつかのコードを抽出しました... – Anila

関連する問題