c++ C2664 'cMan::cMan(char *,char *,double,int)':无法将参数% 1从“const char [6]”转换为“char *”[已关闭]

esyap4oy  于 2023-07-01  发布在  其他
关注(0)|答案(3)|浏览(219)

**已关闭。**此问题为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;
}

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

ee7vknir

ee7vknir1#

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

cclgggtu

cclgggtu2#

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

sr4lhrrt

sr4lhrrt3#

您正在调用构造函数

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]类型。

相关问题