Ошибка компиляции C ++: неопределенный идентификатор (для параметра функции) - PullRequest
0 голосов
/ 29 января 2012

У меня есть класс C ++ main.cpp, в котором я создал класс, подобный следующему:

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

Может кто-нибудь объяснить, почему я получаю эту ошибку и как ее исправить.

РЕДАКТИРОВАТЬ: Я надеюсь, что я ничего не забыл сейчас.

РЕДАКТИРОВАТЬ: Ну, большое спасибо тем, кто понизил.Некоторые из нас не такие эксперты, как вы, и им трудно видеть ошибки, даже маленькие!

1 Ответ

0 голосов
/ 29 января 2012

На первый взгляд есть две возможные причины этой ошибки:

Самый очевидный: Ваше определение класса неполное, оно должно быть

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...