我想制作市场物品上市计划。我遇到了代码问题。这是:
#include <iostream>
#include <string>
using namespace std;
char n = '\n';
class shop
{
public:
void setItem(int a, string b, float c){
itemCode = a;
itemName = b;
itemPrice = c;
}
int getCode(string a){
cout<< a<<itemCode<<n;
//return itemCode;
}
string getName(string b){
cout<< b<<itemName<<n;
//return itemName;
}
float getPrice(string c){
cout<< c<<itemPrice<<n;
//return itemPrice;
}
void getAll (string a,string b,string c){
getCode(a);
getName(b);
getPrice(c);
}
private:
int itemCode;
string itemName;
float itemPrice;
};
int main()
{
string daiktas;
int kodas;
float kaina;
while(1){
cout<< "Iveskite daikto pavadinima: "<<n;
cin>> daiktas;
cout<< "Iveskite daikto koda: "<<n;
cin>> kodas;
cout<< "Iveskite daikto kaina: "<<n;
cin>> kaina;
shop kodas1;
kodas1.setItem(kodas, daiktas, kaina);
kodas1.getAll("Kodas: " , "Preke: ", "Kaina: ");
}
}
输入第二个cin
(kodas)之后,我得到cmd“已停止工作”,在该程序cout
之前:getName和getCode;
为什么不起作用?
答案 0 :(得分:0)
// terrible code, don't use
int getCode(string a){
cout<< a<<itemCode<<n;
//return itemCode;
}
string getName(string b){
cout<< b<<itemName<<n;
//return itemName;
}
float getPrice(string c){
cout<< c<<itemPrice<<n;
//return itemPrice;
}
那是你的问题。你要回垃圾了。在普通类型的情况下这是好的,但是string
右边会尝试在循环结束时释放,因为它超出范围 - 而bam,你损坏了堆栈。事实上,gcc甚至会告诉你:
*`./prog'出错:双重免费或损坏(快速登陆):0x08627a40 *
只需删除评论,让无用的return
实际返回真实的东西(或使它们成为void
,因为似乎没有人关心他们正在返回的东西)并且它的工作“很好”。正如代码可以正常工作一样好......至少它不会充当恶意软件并破坏用户的记忆。