表达式块类型有效 // 堆栈溢出
expression block type is valid // Stack overflow
尝试用 C++ 为我的大学构建一个项目。
尝试使用我在 Main.cpp 中为 MyDate 创建的方法
它一直让我堆栈 o/f 和 "expression block type is valid " 错误。
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;
}
非常感谢你们的帮助!!
您在 MyDate.h 中定义的函数 Date::setCmnt
仅将 Date::c
的第一个字符替换为输入字符串 cmnt
的第一个字符,而不是整个细绳。可能 Date::c
甚至没有初始化,所以你在这里覆盖了一些随机内存。
我强烈建议使用 std::string
来处理字符串。但是,您要指出的是,这是针对大学的,也许您还没有被介绍给 std::string
,或者出于学术原因,您应该在这里与 char*
一起工作。因此,我将在这个答案中使用 char*
:
在您的 Date::setCmnt
函数中,您需要像在复制函数中那样复制字符串。此外,如果 Date::c
已经分配了一个值 (!=nullptr
),您应该首先对其调用 delete[]
,这样您就不会造成内存泄漏。您还需要保证 Date::c
在 class.
的每个构造函数中正确初始化(例如 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;
};
尝试用 C++ 为我的大学构建一个项目。 尝试使用我在 Main.cpp 中为 MyDate 创建的方法 它一直让我堆栈 o/f 和 "expression block type is valid " 错误。
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;
}
非常感谢你们的帮助!!
您在 MyDate.h 中定义的函数 Date::setCmnt
仅将 Date::c
的第一个字符替换为输入字符串 cmnt
的第一个字符,而不是整个细绳。可能 Date::c
甚至没有初始化,所以你在这里覆盖了一些随机内存。
我强烈建议使用 std::string
来处理字符串。但是,您要指出的是,这是针对大学的,也许您还没有被介绍给 std::string
,或者出于学术原因,您应该在这里与 char*
一起工作。因此,我将在这个答案中使用 char*
:
在您的 Date::setCmnt
函数中,您需要像在复制函数中那样复制字符串。此外,如果 Date::c
已经分配了一个值 (!=nullptr
),您应该首先对其调用 delete[]
,这样您就不会造成内存泄漏。您还需要保证 Date::c
在 class.
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;
};