试图用C ++为我的大学建立一个项目。尝试使用我在Main.cpp中为MyDate创建的方法时,该方法使我不断出现堆栈o / f和“表达式块类型有效”错误。
main.cpp:
date1.setDay(8);
date1.setMonth(4);
date1.setYear(1994);
date1.setCmnt("Bday"); //problem with chars and pointers..
date1.print();
//Copy Constructor
date2 = date1;
date2.print();
MyDate.h:
void setCmnt(char *cmnt){
if (cmnt!=nullptr)
*c = *cmnt;
};
复制常量:
day=Date.day;
month=Date.month;
year=Date.year;
if (Date.c != nullptr)
{
c = new char[strlen(Date.c) + 1];
strcpy(c, Date.c);
//*c = *Date.c;
}
tnx有很多为您服务的人!
Date::setCmnt
您在MyDate.h中定义的函数仅用Date::c
输入字符串的第一个字符替换的第一个字符cmnt
,而不是整个字符串。可能Date::c
甚至还没有初始化,所以您在这里覆盖了一些随机内存。
我强烈建议std::string
用于处理字符串。但是,您要指出的是,这是针对大学的,也许您尚未被介绍,std::string
或者是出于学术原因,您应该在char*
这里工作。因此,我将char*
在此答案中使用:
在Date::setCmnt
函数中,您需要像在复制控件中一样复制字符串。另外,如果Date::c
已经分配了值(!=nullptr
),则应delete[]
首先对其进行调用,以免造成内存泄漏。您还需要保证在类的每个构造函数中Date::c
均已正确初始化(例如nullptr
)。
例如:
void setCmnt(char *cmnt){
if (c!=nullptr)
delete[] c;
if (cmnt!=nullptr){
c = new char[strlen(cmnt) + 1];
strcpy(c, cmnt);
}
else c = nullptr;
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句