2012-05-11 3 views
2

숙제에 대한 도움이 필요합니다. 주차 시설 코드를 작성해야합니다. 그것을 작성하려면 힙과 다른 클래스 "Parkinggarage"를 통해 #define EMPTY "--------". 으로 작성된 클래스 "Parkbox"의 인스턴스를 복사해야합니다. 따라서 내 코드는 입니다. Parkbox 정의 :클래스의 인스턴스를 C++의 char * 변수와 어떻게 비교할 수 있습니까?

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 같은 다른 변수와 직접 비교하려면 어떻게해야합니까?

나는 당신이 분명할지 모르겠다. 하지만이 문제를 해결하지 못하면 코드 작성을 계속할 수 없기 때문에 도와주세요.

+0

'p2parkboxes [f] [r] [c]'유형의 정의를 게시 할 수 있습니까? – hmjd

+0

예 다음과 같이 선언합니다. class ParkingGarage { Parkbox *** p2parkboxes; 그리고 나는 CTOR와 객체를 생성했다 : ParkingGarage :: ParkingGarage (const int rw, const int clm, const int plns) { \t p2parkboxes = new Parkbox ** [plns]; // 바닥을 가리키고 (평면 p = 0; p + p ++) { \t \t p2parkboxes [p] = 새로운 Parkbox * [plns]; // 각 평면에 대해 포인터의 배열을 만듭니다. 즉, 행과 동일 NUM 위한 \t \t (INT에서 R = 0, R mrmrk

+0

그리고 'Parkbox'? – hmjd

답변

0

일반적으로 두 가지 유형 만 비교할 수 있습니다. 연산자 오버로딩을 사용하면이 문제를 해결하기 위해 자체 비교 연산자를 정의 할 수 있습니다. C++에서는 기본적으로 두 클래스를 비교할 수 없습니다.

그래서 코드에서 char * 유형을 클래스 유형과 비교하는 것으로 보입니다. char *를 다른 char *와 비교해야합니다. 문자열로 취급하는 경우 strcmp를 사용하여 안전성을 높여야합니다.

+0

포인터를 비교하는 것은 일반적으로 좋은 생각이 아닙니다. 포인터를 비교하고 싶지 않으면 포인터를 비교할 필요가 없습니다. – Mario

+0

그래서 여기에 해결책이 있습니다. 나는이 부분에 대해 4 일 동안 일하고 있는데 그 방법을 찾지 못했습니다. ( – mrmrk

+0

Mario, 그건 사실입니다. 어쨌든 적어도 msvC++에서는 단순한 상황에서 작동합니다. 표준의 경우라면 dunno. mrmrk – weggo

0

일치하는 연산자 오버로드를 만들어야합니다. 컴파일러 오류가 당신에게 매개 변수의 이름을 지정해야하지만, 회원은 대부분 조금 다음과 같이한다 : 실제 멤버가 많은에 무엇이 유지로 대체되어야한다

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

memberstring있다.

+0

하지만 여기에서는 문자열 클래스를 사용할 수 없습니다. 우리가 사용할 수있는 것은 stcpy와 strlen 뿐이며 운영자 과부하 또는이 예를 연구하지 않았으므로 다른 방법으로도 사용할 수 없습니다. – mrmrk

+0

@mrmrk 여기서 문자열 클래스는 사용되지 않습니다. 'strcmp'는'strlen'과'strcpy'처럼'char *'에서 작동합니다. – RedX

+0

필요하다면, 캐릭터를 비교하는 두 문자열을 반복하는 독자적인'strcmp()'함수를 작성할 수도 있습니다. 그리 어렵지 않습니다. – Mario

관련 문제