c++ sdgafdafsgdsfghdsfhfdghfdghfdghfdghfdgh [已关闭]

jxct1oxe  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(128)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
去年关闭。
Improve this question
erghdfshfdggggggggghedsfgeeeeeeeeeeeeeeeeeertwer

webghufk

webghufk1#

字符串字面量是const char[]数组,所以你需要更新你的cMan()构造函数,以接受const char*指针而不是char*指针。或者,使用std::string

vdzxcuhz

vdzxcuhz2#

问题是const
尝试使用const char *而不是char *

ao218c7q

ao218c7q3#

您正在调用构造函数

cMan cmI("Michal", "Stanko", 83.5, 200);

向其传递字符串文字。
在C++中,与C相反,字符串字面量具有常量字符数组的类型。用作参数表达式,它们隐式转换为指向其第一个字符的指针,类型为const char *
因此,如果您打算使用字符串文字作为构造函数的参数,那么将其声明为

cMan( const char *chFirstName, const char *chLastName, double dWeight, int iHeight);

请注意在此声明中使用的字符串文字

cMan cmI("Michal", "Stanko", 83.5, 200);

具有比类中相应的初始化数据成员更多的字符。
如果要传递的字符串文字的长度小于声明为数据成员的数组的大小,则此循环

for (int i = 0; i < 5; i++)
{
    this->chFirstName[i] = chFirstName[i];
    this->chLastName[i] = chLastName[i];
}

可能是尝试使用数据成员时出现未定义行为的原因。
因此,为了避免未定义的行为,最好将字符串存储在数据成员中。您可以将数据成员声明为std::string类型,而不是char[5]类型。

相关问题