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

您不能this以这种方式使用指针

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

因为它不是一个函数。您似乎正在尝试在另一个构造函数中调用您的类的另一个构造函数。这不会按您的意愿工作-您不能像成员函数一样调用构造函数-在对象的实例上调用成员函数,而构造函数用于创建对象。您应该以与在其他构造函数中相同的方式设置变量,或者更好地使用初始化列表。

#include<string>如果您位于标题的顶部,则应解决另一个错误。

于 2012-09-05T07:18:37.300 回答
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 回答