【发布时间】:2012-05-29 03:41:21
【问题描述】:
我的程序在运行时崩溃。如果我注释掉if((str1->compare(*str2))==0 ){...} 行,它可以正常工作。我不知道如何比较比较后创建和删除的字符串 * 的两个元素。
main.cpp: In function `int operator==(const Integer&, const Integer&)':
main.cpp:18: warning: taking address of temporary
main.cpp:19: warning: taking address of temporary
整数.h
class Integer {
public:
Integer(int val, char *opis):m_val(val),m_opis(opis)
{
this->m_val = 0;
this->m_opis = strdup("0");
}
friend int operator==(const Integer&,const Integer&);
private:
int m_val;
char *m_opis;
}
main.cpp
int operator==(const Integer&a, const Integer&b){
string *str1 = &string ( a.m_opis );
string *str2 = &string ( b.m_opis );
if((str1->compare(*str2))==0 ){return 1 ;} //<- Here is my problem i think.
delete str1;
delete str2;
return 0;
}
}
//Objects and comparing
Integer o1(15,"lala");
Integer o2(150,"lala");
Integer o3;
cout<<o1==o2;
【问题讨论】:
-
你应该听听你的编译器,也许,你知道,不要在第 18 行和第 19 行获取临时地址。
-
你为什么要获取字符串参数的地址,然后尝试删除它们?我看不出有任何理由在这里使用指针。
-
当您的编译器发出警告时请注意!!!!!!!
标签: c++ string operators char compare