2012-05-11 13 views
2

私は宿題に助けが必要です。私は駐車場のコードを書く必要があります。それを書くために、ヒープ上に作成されたクラス "Parkbox"のインスタンスの入力をコピーし、別のクラス "Parkinggarage"を#define EMPTY "--------". とコピーする必要があります。これは私のコードです: 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インスタンスを作成するために:

「いいえ演算子」ということ、それは私にエラーを与える方法を、これまでの点で「 p2parkboxes[f][r][c]==EMPTY
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; 
       } 
      } 
     } 
    } 
} 

== "これらのオペランドと一致します"、。 次に、クラスインスタンスをEMPTYなどの別の変数と直接比較するにはどうすればよいですか?

私はあなたのために明確であるかどうかわかりません。 しかし、私がこの問題を解決しなければ、自分のコードを完成させることができないので、助けてください。

+0

'p2parkboxes [f] [r] [c]'の種類の定義を投稿できますか? – hmjd

+0

はいこれは次のように宣言しています:class ParkingGarage { Parkbox *** p2parkboxes;私は駐車場にオブジェクトを作成しました:ParkingGarage :: ParkingGarage(const int rw、const int clm、const int plns){ \t p2parkboxes = new Parkbox ** [plns]; //フロアをポイントし、 p2parkboxes [p] = new Parkbox * [plns]; //各プレーンに対して、ポインタの配列を作成する(floatと同じサイズのp2pのarraq) \t(int p = 0; p p; p ++){ \t \tそれはの行 \t \tのNUMと同じである(INT R = 0; R mrmrk

+0

「パークボックス」? – hmjd

答えて

0

一般に、2つの同じ種類の比較のみが可能です。演算子のオーバーロードによって、この問題を処理する独自の比較演算子を定義できます。しかし、C++ではデフォルトで2つのクラスを比較することはできません。

あなたのコードでは、char *型とクラス型を比較しているようです。 char *を別のchar *と比較する必要があります。文字列として扱われている場合は、strcmpを使用して安全性を高める必要があります。

+0

ポインタを比較するのは良い考えではありません(ポインタを比較したいのではなく、ポインタの値ではありません)。 – Mario

+0

だからここでの解決策は何ですか。私は今この部分を4日間作業していますが、私はそれのための方法を見つけることができませんでした:(。 – mrmrk

+0

Mario、それは本当にシンプルな状況では何とかmsvC++で動作します。 – 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

関連する問題