需要帮助,请指导我。 如何解决如下所述的错误?
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);
}
};
答案 0 :(得分:2)
您正在寻找的功能是compare
,而不是compareTo
(Java,C#任何人)?
另请注意,您的范围中未声明angle
。你的意思是:
return this->zipCode.compare("angel");
或者你只是省略了变量?
您也(“应该”适用):
this->
compare
的替代方案,您可以使用==
(这会使true
返回相等)print
和compareTo
应标记为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 ++中,通过覆盖比较运算符(==
,<
等)使对象更具可比性更为常见;这样做可以更方便地使用标准算法和其他使用类似习语的代码。你可能想要考虑做那种事情,而不是试图使用其他语言的习语。