我有一个来自另一个项目的有效示例,与此相同。但是由于这个项目中的某些原因,我无法做到这一点,而且调试它的时间很短。
我有一个带有构造函数的父类:
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)
效果很好。知道发生了什么事吗?
答案 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);