我在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;
}
答案 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)
{
}