2

我的家庭作业需要帮助。我需要为停车场编写代码。为了编写它,我需要将我的类“ Parkbox”实例的输入,它是在堆上并通过另一个类“Parkinggarage”创建的,#define EMPTY "--------". 所以这是我的代码:Parkbox 定义:

class Parkbox{
char *license_plate; // car's license plate

public:
Parkbox(); //Default CTOR
Parkbox(char * ); // CTOR
~Parkbox(); // DTOR
void show();
};
and ParkingGarage:
class ParkingGarage{
Parkbox ***p2parkboxes;

和我的 CTOR 或 ParkingGarage 以便在堆上创建 Parkbox 实例:

ParkingGarage::ParkingGarage(const int rw,const int clm, const int plns){

        p2parkboxes = new Parkbox **[plns];//points to the floors and make the arraq of p2p same size as number as floors
        for(int p=0;p<plns;p++){
            p2parkboxes[p]= new Parkbox *[plns];//for each Plane creats an array of pointer that is same with the num of rows
            for(int r=0;r<rw;r++)
                p2parkboxes[p][r]= new Parkbox [clm];
        }
    }

void ParkingGarage::find_next_free_parking_position()
{
    for(int f=0;f<dimensions_of_parkhouse[0];f++){
        for(int r=0;r<dimensions_of_parkhouse[1];r++){
            for (int c=0;c<dimensions_of_parkhouse[2];c++){ 
                //p2parkboxes[f][r][c] is the instance of the class Pakbox
                if(p2parkboxes[f][r][c]==EMPTY)
                {
                    next_free_parking_position[0]=p;
                    next_free_parking_position[1]=r;
                    next_free_parking_position[2]=c;
                }
            }
        }
    }
}

无论如何,“ p2parkboxes[f][r][c]==EMPTY”它给了我“没有运算符”==匹配这些操作数的错误,。那么如何将一个类实例直接与另一个变量(如 EMPTY)进行比较?

我不知道我对你是否清楚。但是请帮助我,因为如果我不解决这个问题,我将无法继续完成我的代码。

4

2 回答 2

0

一般来说,您只能比较两种相同的类型。通过运算符重载,您可以定义自己的比较运算符来解决此问题。但是,C++ 默认无法比较两个类。

因此,在您的代码中,您似乎正在将 char* 类型与您的类类型进行比较。您应该将 char* 与另一个 char* 进行比较。如果将其视为字符串,则应使用 strcmp 以提高安全性

于 2012-05-11T07:43:29.173 回答
0

您必须创建一个匹配的运算符重载。编译器错误应该为您命名参数,但该成员很可能看起来像下面这样:

bool Pakbox::operator==(const char *other) {
    return !strcmp(other, this->memberstring);
}

请注意,memberstring必须由持有该批次物品的实际成员替换。

于 2012-05-11T07:44:16.203 回答