我有一个来自另一个项目的工作示例,它与此相同,并且它是有效的。但由于某些原因,在这个项目中,我不能这样做,我正在经历一段地狱般的调试时间。
我有一个带有构造函数的父类:
Shape (char* _name, char*_colour);
然后,我继续创建另一个使用Shape的构造函数的子类:
Square::Square(char* _colour, float _sideLength) : Shape("Square", _colour)
我得到一个const char*不起作用的错误,特别是
:Shape("Square",_colour)
但是我用完全相同的和一个不同的项目做同样的事情,做完全相同的类型转换,并且它没有bug。我现在被打动了。
工作示例..
Car(char* whichType, int gasConsumption);
和一个子类
Minivan::Minivan(char* whoMade, int mpg, int seating, int space, char* whatColor) : Car("Minivan",mpg)
它工作得很好。知道这是怎么回事吗?
发布于 2019-03-18 08:57:05
一种解释可能是,一个项目使用比C++11更早的C++标准,而另一个项目使用C++11或更高版本的标准。
由于C++11,从字符串到char*
的隐式转换是错误的,因此编译器不需要接受这样的转换。在C++11之前,隐式转换已被弃用,但格式良好,因此需要编译器才能接受程序。
修复方法是改用const char*
。
发布于 2019-03-18 08:59:30
尝试以下操作-
char _name = "YOUR_NAME"; // this is changed
const char* colour = "YOUR_COLOUR"; // this is fine
Shape (char* _name, const char*_colour);
https://stackoverflow.com/questions/55213438
复制相似问题