-1

助けが必要です、これについて私を導いてください。以下に記載されているエラーを解決するにはどうすればよいですか?

  • 30:24:エラー:「,」トークンの前に「)」が必要です

  • メンバー関数 'int Address::compareTo(const Address&)':

  • 41:26:エラー:「std::string」には「compareTo」という名前のメンバーがありません

    #include<iostream>
    using namespace std;

    class Address {
      int    houseNumber;
      string street;
      int    apartmentNumber;
      string city;
      string state;
      string zipCode; // e.g., "47405-1234"
      Address(int houseNumber, 
              string street, 
              // no apartmentNumber  
              string city, 
              string state, 
              string zipCode) { 
        this->houseNumber = houseNumber; 
        this->street = street; 
        this->city = city; 
        this->state = state; 
        this->zipCode = zipCode; 
      } 
      Address(int houseNumber, 
              string street, 
              int apartmentNumber, 
              string city, 
              string state, 
              string zipCode) { 
        this(houseNumber, street, city, state, zipCode);
        this->apartmentNumber = apartmentNumber; 
      } 
      void print(void) {
             std::cout << "Street: " << street << "\nCity: " 
                 << city << "\nState: " << state << "\nPostal Code: " << zipCode;
    }

      int compareTo(const Address &a) { 
        // same conventions as for Strings
        return this->zipCode.compareTo(a); 
      }
    };
4

2 に答える 2

2

あなたが探している関数はcomparecompareTo(Java、C# 誰でも) ではありませんか?

angleまた、スコープで宣言されていないことに注意してください。もしかして:

return this->zipCode.compare("angel"); 

または、変数を省略しましたか?

また、(該当する場合は「する必要があります」):

  • 必要ありませんthis->
  • 代わりにcompare使用できます==(これはtrue同等に戻ります)
  • printcompareToとしてマークする必要がありますconst
  • コンストラクターでメンバー初期化子リストを使用する
  • using namespace std;ヘッダーから を削除します
  • ソースファイルで実装を分離する
  • ヘッダーにインクルード ガードを使用する
  • 適切なインデント
  • ...stringによってコンストラクターにパラメーターを渡しますconst &
于 2012-09-05T08:09:04.367 に答える
1

30:24:エラー:「,」トークンの前に「)」が必要です

あなたが持っている

this(houseNumber, street, city, state, zipCode);

これはナンセンスです。this関数ではなく、構築中のオブジェクトへのポインタです。

おそらく、他のコンストラクターを呼び出して、データ メンバーの一部を初期化しようとしています。C++11 では、別のコンストラクターに委譲できますが、それをサポートしているコンパイラーがまだあるかどうかはわかりません。これは、コンストラクタ本体ではなく、イニシャライザ リストで行う必要があります。

Address(/*args*/) : Address(/*other args*/), apartmentNumber(apartmentNumber) {}

それが機能しない場合は、両方のコンストラクターで初期化を複製するか、それらをメンバー関数に移動して両方のコンストラクターから呼び出す必要があります。

コンストラクターを省略して、代わりに集約初期化を使用することも検討してください。

Address address = {
    123, "Fake Street", /* and so on */
};

ただし、これは、確立するクラス不変条件のないデータを保持するだけのクラスに対してのみ行う必要があります。

41:26:エラー:「std::string」には「compareTo」という名前のメンバーがありません

エラーが示すように、 にcompareToメンバーがありませんstd::string。ただし、というメンバーがいcompareます。あなたのコメントが Java の と同じ動作を望んでいることを暗示していると仮定するとString.compareTo、それはあなたが望むものです。

==ただし、C++ では、比較演算子 ( 、<など)をオーバーライドしてオブジェクトを比較可能にする方がはるかに一般的です。そうすることで、標準アルゴリズムや同様のイディオムを使用する他のコードでの使用がより便利になります。他の言語のイディオムを使おうとするよりも、そのようなことを考えたほうがいいかもしれません。

于 2012-09-05T08:27:00.103 に答える