任何人都可以帮我吗?我是新来的。欢迎任何帮助!
9.3.cpp:在构造函数'Address :: Address(int,std :: string.int.std :: string,std :: String,std :: String)'中: 9.3.cpp:29:51:错误:'this'不能用作函数
9.3.cpp:在成员函数'int Address :: compareTo(const Address&)'中: 9.3.cpp:39: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(angel);
}
};
答案 0 :(得分: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;
}
如果你的编译器还不支持它,那么你必须从第一个构造函数中复制代码,或者将公共初始化放在一个单独的函数中,以便从两个构造函数中调用。
答案 1 :(得分:0)
您不能以这种方式使用this
指针
this(houseNumber, street, city, state, zipCode);
因为它不是一个功能。您似乎正在尝试在其他构造函数中调用类的其他构造函数。这不会像你想要的那样工作 - 你不能像构件函数那样调用构造函数 - 在对象的实例上调用成员函数,而构造函数用于创建对象。您应该像在其他构造函数中一样设置变量,或者使用初始化列表更好地设置变量。
如果您在标题顶部#include<string>
,则应解决其他错误。
答案 2 :(得分:0)
您的代码似乎不是C ++,而是Java或C#:C ++使用成员初始化程序列表将构造函数委托给[sub-]对象(并且委托给同一个类的另一个构造函数是C ++中的新成员。使用成员-initializer列表看起来像这样:
class foo
{
std::string d_val;
public:
foo(std::string const& val)
: d_val(val)
{
}
foo()
: foo("default") // C++ 2011 only
{
}
};