2012-09-05 78 views
-1

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

  • 30:24:error:expected ')' before ',' token

  • In member function 'int Address::compareTo(const Address&)':

  • 41:26:error:'std::string' has no member named '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); 
     } 
    }; 
+1

“41:26:error:'std :: string'has no member named'compareTo'”?参见[std :: string reference](http://en.cppreference.com/w/cpp/string/basic_string)。 – juanchopanza

+0

可能的重复[C++一些错误在这里](http://stackoverflow.com/questions/12276247/c-a-few-errors-here) –

回答

2

你要找的功能是compare,不compareTo(Java和C#的人)?

此外,请注意angle未在您的范围内声明。您的意思是:

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

还是您只是省略了变量?

也( “应该” 如适用):

  • 不需要this->
  • compare替代你可以使用==(这将返回true平等)
  • printcompareTo应标记为const
  • 在构造函数中使用成员初始值设定项列表
  • 从头部卸下using namespace std;
  • 在源文件分开的实现
  • 使用包括用于报头
  • 适当的缩进
  • string参数由const &构造警卫...
1

30:24:error:expected ')' before ',' token

您有

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

这是废话; this是一个指向正在构造的对象的指针,而不是一个函数。

大概你试图调用其他的构造函数来初始化一些数据成员。在C++ 11中,您可以委托给另一个构造函数,但我不知道是否有编译器支持。这必须在初始化器列表来完成,而不是在构造函数体:

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

如果不工作,那么你将不得不要么重复initialisations在这两个构造函数,或将其移动到一个成员函数和呼叫来自两个建设者。

你也可以考虑留出的构造和使用集合初始化代替:

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

虽然你应该仅用于地持有不类不变量数据,建立班级做到这一点。

41:26:error:'std::string' has no member named 'compareTo'

正如错误说,存在std::string没有compareTo成员。但是,有一个名为compare的成员。假设您的评论意味着您需要与Java的String.compareTo相同的行为,那么这就是您想要的。

但是,在C++中,通过重写比较运算符(==,<等)来使对象可比较更为常见。这样做可以更方便地使用标准算法和其他使用类似习惯用法的代码。你可能想要考虑做这种事情,而不是试图使用其他语言的习语。