首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C2664 'cMan::cMan(char *,char *,double,int):无法将参数1从“const[6]”转换为“char *”

C2664 'cMan::cMan(char *,char *,double,int):无法将参数1从“const[6]”转换为“char *”
EN

Stack Overflow用户
提问于 2022-03-04 21:02:45
回答 3查看 146关注 0票数 -3

你好,我正在学习C++。我有这段代码,但是当我试图构建解决方案时,标题中出现了错误。有什么办法解决这个问题吗?

代码语言:javascript
复制
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;
}

我对编程不太了解,但如果有人能尽可能简单地向我解释这一点,我会很高兴的。

EN

回答 3

Stack Overflow用户

发布于 2022-03-04 21:20:02

字符串文本是const char[]数组,因此需要更新cMan()构造函数,以获取const char*指针而不是char*指针。否则,使用std::string代替。

票数 4
EN

Stack Overflow用户

发布于 2022-03-04 21:12:20

问题是const

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

票数 2
EN

Stack Overflow用户

发布于 2022-03-04 21:23:36

您正在调用构造函数。

代码语言:javascript
复制
cMan cmI("Michal", "Stanko", 83.5, 200);

传递给它的字符串文字。

在C++中,与C相反的字符串文本有类型的常量字符数组。作为参数表达式,它们被隐式转换为指向类型const char *的第一个字符的指针。

因此,如果要使用字符串文本作为构造函数的参数,则声明如下

代码语言:javascript
复制
cMan( const char *chFirstName, const char *chLastName, double dWeight, int iHeight);

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

代码语言:javascript
复制
cMan cmI("Michal", "Stanko", 83.5, 200);

有更多的字符,然后是类的相应初始化数据成员。

如果要传递长度小于作为数据成员声明的数组大小的字符串文本,则此循环

代码语言:javascript
复制
for (int i = 0; i < 5; i++)
{
    this->chFirstName[i] = chFirstName[i];
    this->chLastName[i] = chLastName[i];
}

可能是在尝试使用数据成员时出现未定义行为的原因之一。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71357176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档