我的代码中有错误。带有指针的东西我似乎无法修复它



我正在练习指针和类,我试图在输入值后打印类的成员。但是出现了一个与指针和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)

它相当直接地告诉了你问题所在。您试图将字符串字面值传递给setNamesetColor。为了与字符串字面值兼容,您需要一个类型为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[])
// ...

相关内容

  • 没有找到相关文章

最新更新