我正在练习指针和类,我试图在输入值后打印类的成员。但是出现了一个与指针和char数组有关的错误。
错误(激活)E0167参数类型为&;const char *&;
参数类型为&;char *&;
Error (active) E0167 &;const char *&;
错误C2664 'void car::setName(char[])':无法将参数1从'const char[4]'转换为'char []'
错误C2664 'void car::setColor(char[])':无法将参数1从'const char[4]'转换为'char []'
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
class car {
private:
char name[15];
char color[10];
int maxspeed;
int model;
public:
void setName(char n[])
{
strcpy_s(name, n);
}
void setColor(char n[])
{
strcpy_s(color, n);
}
void setMaxspeed(int m)
{
maxspeed = m;
}
void setModel(int m)
{
model = m;
}
char* getName()
{
return name;
}
char* getcolor()
{
return color;
}
int getMaxspeed()
{
return maxspeed;
}
int getModel()
{
return model;
}
void print()
{
cout << "name = " << name << "n"
<< "color = " << color << "n"
<< "Maxspeed = " << maxspeed << "n"
<< "Model = " << model << "n";
}
};
int main()
{
car x;
x.setName("kia");
x.setColor("red");
x.setMaxspeed(300);
x.setModel(2017);
x.print();
return 0;
}
这些是我得到的错误(https://i.stack.imgur.com/xTx7E.png)
它相当直接地告诉了你问题所在。您试图将字符串字面值传递给setName
和setColor
。为了与字符串字面值兼容,您需要一个类型为char const *
(或等价的const char *
)的参数。但是您使用的是char []
,它(在函数参数的情况下)相当于char *
。
因此,将参数更改为char const *
:
void setName(char const *n)
{
strcpy_s(name, n);
}
一旦你这样做了,查找std:string
,并且(除非作业或类似的要求)停止使用原始指针到char
。
在c++中,char*
(或char[]
,如您所写)是不同于const char*
的类型,字符串字面值属于后者。你不能将const char*
传递给期望char*
的函数。
如果你重写你的函数为const char*
或const char[]
,它将工作:
void setColor(const char n[])
// ...
void setColor(const char n[])
// ...