![](/img/trans.png)
[英]C++ warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
[英]Can't get pass C++ warning: (& crash after) deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
我尝试了一切,我甚至无法启动这个简单的图形代码。 我在所有正确的文件夹中安装了graphics.h,winbgim.h和libbgi.a。 (包括和lib)。 连接器,-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
我正在使用CodeBlocks 16.01。 我也在Dev-C ++中试过没有运气。
首先我得到错误:
C:\\ Program Files(x86)\\ CodeBlocks \\ MinGW \\ include \\ graphics.h | 302 |错误:重新定义'int right'
但我解决了这个问题,通过更改graphics.h文件, int right
需要用int top
替换。
还有1个警告 -
C:\\ Users \\ Davor \\ Desktop \\ New Project \\ drugi \\ main.cpp ||在函数'int main()'中: C:\\ Users \\ Davor \\ Desktop \\ New Project \\ drugi \\ main.cpp | 15 |警告:不推荐将字符串常量转换为'char *'[-Wwrite-strings] | || ===构建完成:0个错误,1个警告(0分钟,0秒(秒))=== |
在那之后,当我按下“构建并运行”时,我得到了
“* .exe已停止工作。”在我第一次得到的背景中 -
进程返回255(0xFF)执行时间:91.666秒按任意键继续。
但每隔一段时间我都会 -
进程返回-1073741819(0xC0000005)执行时间:26.494 s按任意键继续。
#include <iostream>
#include <cstdlib>
#include <graphics.h>
using namespace std;
int main() {
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 260; x < 364; x = x + 5)
{
circle(x,240,60);
}
getch();
closegraph();
return 0;
}
如果没有查看<graphics.h>
,看来initgraph()
被声明为将(非const)char *作为第三个参数 - 建议它是一个输出参数,指向一个可写的char数组initgraph()
会写信给。
除了产生你引用的警告之外,传递字符串常量""
作为参数将导致未定义的行为,其中崩溃是一个完美的例子。
虽然我上面的评论是有效的,但在查看文档后我会猜测参数不是输出参数,而缺少const
只是简单的API实现 - 因为显然没有任何方法可以确定初始化是否真的成功了或不...
我找到了解决方案。
问题出在下一个图书馆:
libbgi.a
我尝试了不同的,但最后我发现了正确的。 一旦我用旧的替换它 - 图形窗口打开并且工作得很好,没有崩溃。
警告:
不推荐将字符串常量转换为'char *'[ - WRrite-strings] |
仍然存在,但代码完美无缺。
无论如何,谢谢你的帮助。
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.