错误:ISO C ++禁止从字符串常量转换为char *

时间:2018-11-05 11:40:14

标签: c++ codeblocks

因此,我有一个使用图形模式[CrossDeviceInfo.Current.Platform.ToString(); ]库的程序... 并且我想初始化图形,所以我会自然地这样做:

graphics.h

当我编译上面的代码时,它给出错误“ ISO C ++禁止将字符串常量转换为char *”

我知道一种解决方法:

initgraph(graphics_driver,graphics_mode,"") ;

以上编译就可以了... 对于char c_array[] = "" ; initgraph(graphics_driver,graphics_mode,c_array) ; 之类的函数,这没关系,因为我只会调用一次。但是,我想像这样使用initgraph()函数(因为我在程序中多次调用它):

outtextxy()

因为为所有不同的outtextxy(0,0,"Test") ; 函数声明一个数组只会浪费空间。

那么,有没有办法使用上面的方法而没有数组或任何额外的变量?

P.S:安装outtextxy()库并配置所有链接器选项后,我正在使用代码块。等等...

谢谢,再见, 塞缪尔

2 个答案:

答案 0 :(得分:5)

您引用的文件graphics.hpositively ancient

它太旧了,早于const

字符串文字一直是const char[N]二十年了。从那时起不推荐使用它们,而是假装它们是char[N]。从C ++ 11开始,它是完全非法的。从过去的const以前开始,已有十三年的时间来移植代码,此后还有七年的时间。

您必须像现在这样破解(将字符串文字复制到可能可变的缓冲区,即使它不会发生突变!),也可以用const_cast进行破解(是< em>非常确保该参数不会被更改!),或者改用这个千年中的库。

答案 1 :(得分:1)

如果您完全确定outtextxy()不会修改传递给它的字符串,则可以编写自己的包装函数,如:

void my_outtextxy(int x, int y, const char* text) {
  outtextxy(x, y, const_cast<char*>(text));
}