具有const char *和char *的无效参数类型

时间:2019-03-18 00:50:23

标签: c++

我有一个来自另一个项目的有效示例,与此相同。但是由于这个项目中的某些原因,我无法做到这一点,而且调试它的时间很短。

我有一个带有构造函数的父类:

Shape (char* _name, char*_colour);

然后我继续创建另一个使用Shape的构造函数的子类:

Square::Square(char* _colour, float _sideLength) : Shape("Square", _colour) 

我收到一个错误,指出const char *不起作用,特别是

:Shape("Square",_colour)

但是我后来在另一个项目中进行了完全相同的操作,并且执行了完全相同的转换,并且没有错误。我现在被吓死了。

工作示例..

Car(char* whichType, int gasConsumption);

和一个子班

Minivan::Minivan(char* whoMade, int mpg, int seating, int space, char* whatColor) : Car("Minivan",mpg)

效果很好。知道发生了什么事吗?

2 个答案:

答案 0 :(得分:1)

一种解释可能是一个项目使用的C ++标准早于C ++ 11,而另一个项目使用的C ++ 11或更高版本。

从C ++ 11开始,从字符串文字到char*的隐式转换格式不正确,因此不需要编译器接受这种转换。在C ++ 11之前,不建议使用隐式转换,但是隐式转换格式良好,因此需要编译器接受该程序。

解决方法是改用const char*

答案 1 :(得分:0)

尝试以下-

char _name           = "YOUR_NAME";      // this is changed

const char* colour  = "YOUR_COLOUR";  // this is fine

Shape (char* _name, const char*_colour);