错误需要指导

时间:2012-09-05 08:06:54

标签: c++ error-handling

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

  
      
  • 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); 
      }
    };

2 个答案:

答案 0 :(得分:2)

您正在寻找的功能是compare,而不是compareTo(Java,C#任何人)?

另请注意,您的范围中未声明angle。你的意思是:

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

或者你只是省略了变量?

您也(“应该”适用):

  • 不需要this->
  • 作为compare的替代方案,您可以使用==(这会使true返回相等)
  • printcompareTo应标记为const
  • 在构造函数中使用成员初始化列表
  • 从标题
  • 中删除using namespace std;
  • 将源文件中的实现分开
  • 使用包含头部的警卫
  • 适当的缩进
  • 通过string ...
  • const &参数传递给构造函数

答案 1 :(得分: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 ++中,通过覆盖比较运算符(==<等)使对象更具可比性更为常见;这样做可以更方便地使用标准算法和其他使用类似习语的代码。你可能想要考虑做那种事情,而不是试图使用其他语言的习语。