【发布时间】:2021-09-10 14:03:44
【问题描述】:
好的,我已经编辑了代码。当输入数据部分出现输出屏幕时出现问题。它需要所有者名称,但之后立即崩溃。(问题中的 ps,house 应该有一个 100 obj 的数组),我还想问是否有办法修复字符串大小,以便用户只能输入名称20码以内?
class House
{
private:
string owner;
string address;
int bedrooms;
float price;
public:
House(string owner="", string address="", int bedrooms = 0, float price = 0.0)
{
this->owner = owner;
this->address = address;
this->bedrooms = bedrooms;
this->price = price;
}
void setOwner(string owner)
{
this->owner = owner;
}
void setAddress(string address)
{
this->address = address;
}
void setBedrooms(int bedrooms)
{
this->bedrooms = bedrooms;
}
void setPrice(float price)
{
this->price = price;
}
string getOwner()
{
return owner;
}
string getAddress()
{
return address;
}
int getBedrooms()
{
return bedrooms;
}
float getPrice()
{
return price;
}
void getData()
{
cout << "Enter Owner : ";
cin >> owner;
setOwner(owner);
cout << "Enter Addres : ";
cin >> address;
setAddress(address);
cout << "Number of Bedrooms? : ";
cin >> bedrooms;
setBedrooms(bedrooms);
cout << "Price : ";
cin >> price;
setPrice(price);
cout << endl;
}
void display()
{
cout << "Owner \t Address \t Bedrooms \t Price" << endl;
cout << getOwner() << "\t" << getAddress() << "\t" << getBedrooms() << "\t" << getPrice() << "\t" << endl;
}
};
int main()
{
House *h[100] ;
int time=0;
char yesorno;
do
{
h[time]->getData();
h[time]->display();
cout << "Do you wish to continue ?";
cin >> yesorno;
time++;
} while (yesorno == 'y' || yesorno =='Y');
return 0;
}
【问题讨论】:
-
您真的要允许 20 位业主拥有一个房子吗?房子有20个地址?我认为每个房子都应该有 1 个地址。
-
如果最大长度是 20,那么你的 C 字符串的长度应该是 21。但这很奇怪,我不明白为什么你不能在 最低。也就是说,如果您坚持使用 C 字符串而不是
std::string。我能想到很多不适合 19 个字符的地址。 -
我收到错误“没有类 House 的默认构造函数” 这与您对数组的不当使用完全无关。要使用
House houseinfo;,因为您没有传递所需的参数,编译器会要求您声明一个默认构造函数:House() -
string owner[20];-- 您的代码令人困惑。你的意思是每栋房子最多有 20 个业主,还是一个业主的名字可以有 20 个字符?如果是后者,则此声明与描述不符。也许困惑是您认为std::string只能包含一个字符? -
我认为你的教授希望你使用 c-strings 而不是正确的 c++ std::string。