C ++错误:无法将参数2从'char'转换为char []'

时间:2018-10-02 05:27:51

标签: c++

我在Visual Studio 2017中遇到此错误:

  

错误C2664:'void Employee :: assignDetails(int,char [],double)':无法将参数2从'const char [6]'转换为'char []'

     

注意:从字符串文字转换会丢失const限定符(请参见/ Zc:strictStrings)

我不明白怎么了。 这是代码:

class Employee
{
public:
    void assignDetails(int pempno, char pname[], double pbasicSal);
};

void Employee::assignDetails(int pempno, char pname[], double pbasicSal)
{
}

int main()
{
    Employee emp1;

    emp1.assignDetails(10, "Wimal", 50000);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

"Wimal"字符串文字的类型为const char [6],但是您的方法使用的类型为char[]

const很重要,它告诉编译器不允许修改字符串。您需要将方法的签名更改为const char[]

除非您真的知道自己在做什么,否则应始终使用std::string而不是原始字符数组。字符串文字会自动转换为std::string。您可以使用以下代码复制字符串:

std::string string1 = "Wimal";
std::string string2 = string1;

这比等效的c字符串更简单,更安全:

const char* string1 = "Wimal";
char* string2 = (char*)malloc(strlen("Wimal"));
strcpy(string2, string1); // will produce undefined behaviour if string2 is too small
free(string2); // easy to forget and causes memory leaks

答案 1 :(得分:0)

问题在于,当您使C ++字符串常量为常量时,例如:"Wimal"const char *

因此,当您调用函数时,无法将其转换为char[]类型的参数。 将参数转换为const char *,它将起作用

void Employee::assignDetails(int pempno, const char *pname, double pbasicSal)
{
}