1

誰かがこれを手伝ってくれますか?私はここで新しいです。どんな助けでも大歓迎です!

9.3.cpp:コンストラクター内'Address :: Address(int、std :: string.int.std :: string、std :: String、std :: String)':9.3.cpp:29:51:error:'this '関数として使用することはできません

9.3.cpp:メンバー関数内'int Address :: compareTo(const Address&)':9.3.cpp:39:26:error:'std::string'には'compareTo'という名前のメンバーがありません</p>

#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(angel); 
  }
};
4

3 に答える 3

1

この行:

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

少なくともこのように、独自のコンストラクターを呼び出すことはできません。C++11 標準の新機能は、初期化子リストを使用してそれを行う方法です。

Address(int houseNumber, 
        string street, 
        int apartmentNumber, 
        string city, 
        string state, 
        string zipCode)
    : Address(houseNumber, street, city, state, zipCode)
{ 
    this->apartmentNumber = apartmentNumber;
}

コンパイラがまだサポートしていない場合は、最初のコンストラクターからコードをコピーするか、両方のコンストラクターから呼び出される別の関数に共通の初期化を配置する必要があります。

于 2012-09-05T07:17:12.480 に答える
0

コードはC++ではなく、JavaまたはC#のようです。C++はメンバー初期化子リストを使用してコンストラクターを[sub-]オブジェクトに委任します(同じクラスの別のコンストラクターへの委任はC++では新しいです。メンバー初期化子リストの使用次のようになります。

class foo
{
    std::string d_val;
public:
    foo(std::string const& val)
        : d_val(val)
    {
    }
    foo()
        : foo("default") // C++ 2011 only
    {
    }
};
于 2012-09-05T07:20:34.900 に答える
0

thisこの方法ではポインタを使用できません

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

関数ではないので。クラスの他のコンストラクターを他のコンストラクター内で呼び出そうとしているようです。これは意図したとおりには機能しません。メンバー関数のようにコンストラクターを呼び出すことはできません。メンバー関数はオブジェクトのインスタンスで呼び出されますが、コンストラクターはオブジェクトの作成に使用されます。他のコンストラクターと同じ方法で変数を設定するか、初期化リストを使用して設定することをお勧めします。

#include<string>ヘッダーの上部にいる場合は、他のエラーを解決する必要があります。

于 2012-09-05T07:18:37.300 に答える