-1

需要帮助,请指导我。如何解决如下所述的错误?

  • 30:24:error:expected ')' before ',' 标记

  • 在成员函数'int Address::compareTo(const Address&)'中:

  • 41:26:error:'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

您正在寻找的功能是compare,而不是compareTo(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:error:expected ')' before ',' 标记

你有

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:error:'std::string' 没有名为 'compareTo' 的成员

正如错误所说compareTostd::string. 但是,有一个成员叫compare. 假设您的评论暗示您想要与 Java 相同的行为String.compareTo,那么这就是您想要的。

==然而,在 C++ 中,通过覆盖比较运算符( 、<等)来使对象具有可比性更为常见;这样做可以更方便地使用标准算法以及使用类似习语的其他代码。您可能想要考虑做这种事情,而不是尝试使用其他语言的习语。

于 2012-09-05T08:27:00.103 回答