你好,我正在学习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;
}我对编程不太了解,但如果有人能尽可能简单地向我解释这一点,我会很高兴的。
发布于 2022-03-04 21:20:02
字符串文本是const char[]数组,因此需要更新cMan()构造函数,以获取const char*指针而不是char*指针。否则,使用std::string代替。
发布于 2022-03-04 21:12:20
问题是const。
尝试使用const char *而不是char *
发布于 2022-03-04 21:23:36
您正在调用构造函数。
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]。
https://stackoverflow.com/questions/71357176
复制相似问题