**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
去年关闭。
Improve this question
你好,我正在学习C++。我有这个代码,但当我试图建立解决方案的错误,从标题显示出来。有办法解决吗?
class cMan
{
public:
cMan(char *chFirstName, char *chLastName, double dWeight, int iHeight);
~cMan();
void vWriteMembersValues();
private:
char chFirstName[5];
char chLastName[5];
double dWeight;
int iHeight;
};
cMan::cMan(char *chFirstName, char *chLastName, double dWeight, int iHeight)
{
for (int i = 0; i < 5; i++)
{
this->chFirstName[i] = chFirstName[i];
this->chLastName[i] = chLastName[i];
}
this->dWeight = dWeight;
this->iHeight = iHeight;
}
cMan::~cMan()
{
delete this;
}
void cMan::vWriteMembersValues()
{
for (int i = 0; i < 5; i++)
{
cout << this->chFirstName[i];
}
for (int i = 0; i < 5; i++)
{
cout << this->chLastName[i];
}
cout << " " << this->dWeight;
cout << " " << this->iHeight;
}
int main()
{
cMan cmI("Michal", "Stanko", 83.5, 200);
cmI.vWriteMembersValues();
cout << endl;
cmI.~cMan();
cin.get();
cin.get();
return 0;
}
我不太懂编程,但如果有人能尽可能简单地向我解释这一点,我会很高兴。
3条答案
按热度按时间ee7vknir1#
字符串字面量是
const char[]
数组,所以你需要更新你的cMan()
构造函数,以接受const char*
指针而不是char*
指针。或者,使用std::string
。cclgggtu2#
问题是
const
。尝试使用
const char *
而不是char *
sr4lhrrt3#
您正在调用构造函数
向其传递字符串文字。
在C++中,与C相反,字符串字面量具有常量字符数组的类型。用作参数表达式,它们隐式转换为指向其第一个字符的指针,类型为
const char *
因此,如果您打算使用字符串文字作为构造函数的参数,那么将其声明为
请注意在此声明中使用的字符串文字
具有比类中相应的初始化数据成员更多的字符。
如果要传递的字符串文字的长度小于声明为数据成员的数组的大小,则此循环
可能是尝试使用数据成员时出现未定义行为的原因。
因此,为了避免未定义的行为,最好将字符串存储在数据成员中。您可以将数据成员声明为
std::string
类型,而不是char[5]
类型。