C++17中包含XPM映像时出现警告 我正在使用一个用STD+C++ 17和-Walk标志编译的C++项目。我通常被要求清除警告

C++17中包含XPM映像时出现警告 我正在使用一个用STD+C++ 17和-Walk标志编译的C++项目。我通常被要求清除警告,c++,c++17,C++,C++17,我尝试从png文件中包含使用在线工具生成的xpm图像,并得到以下警告: 警告:ISO C++禁止将字符串常量转换为'char * [-WWORD String ] 最糟糕的是,这条消息被一次又一次地重复,以至于我的控制台不再保存错误消息 是否有任何方法可以在保留两个标志的同时抑制此警告?我可以对xpm文件进行任何修改吗?在包含xpm文件时,您可以临时: #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wwrite-str

我尝试从png文件中包含使用在线工具生成的xpm图像,并得到以下警告:

警告:ISO C++禁止将字符串常量转换为'char * [-WWORD String ]

最糟糕的是,这条消息被一次又一次地重复,以至于我的控制台不再保存错误消息

是否有任何方法可以在保留两个标志的同时抑制此警告?我可以对xpm文件进行任何修改吗?

在包含xpm文件时,您可以临时:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wwrite-strings"
#include "banana.xpm"
#pragma GCC diagnostic pop

< P> > CLAN相同,用CLAN替换GCC。< /P> < P>创建XPM文件的工具可能只考虑C语言或标准C++,其中缺少const不是错误。但是,在C++中,字符串文字是const,而语言则强制执行。你不能改变这个东西,所以一个字符*对它来说毫无意义,应该是常量字符*


最简单的解决方案是简单地编辑xpm文件并添加常量。

错误是来自您的代码还是您正在使用的xpm库?我假设api正在请求char*,您正在传递一个类似文本的字符串,从技术上讲,它应该衰减为const char*,而不是char*,这是警告的内容,在C++中,所有文字字符串都是字符的常量数组。因此,您需要一个const char*类型来引用它们。您包含的代码似乎使用的是C语言中有效的纯字符*。您真的需要了解更多关于您正在做的事情-这是导致这种情况的头包含吗?这在您编译的第三方代码中看到了吗?我不建议你这样做,但如果你被卡住了,你可以这样做。请尝试在包含的头之前添加此项,或者改用“忽略”:pragma GCC diagnostic warning-Wwrite strings为什么不简单地编辑xpm文件并将char*更改为const char*?对于Clang也一样,只需将GCC替换为Clang即可。Clang理解GCC的pragmas,所以你不必这么做。这很有效。在接受之前,我会等待一段时间,看看是否有其他答案出现。仅仅沉默编译器警告很少是正确的解决方案。正确的解决方案通常是解决警告的实际潜在原因。给定上下文,这意味着对每个图像都要进行额外的后处理步骤。为了实现这一点,您最好选择将xpm文件编译为C,或者使用ld的二进制嵌入。在该上下文中缺少const不是在C++11之后才成为错误吗?char*s=你好;如果我没记错的话,@Ayxan在C++03中才被弃用,老实说,我不太记得了。但即使在它被弃用之前,使用const始终是更正确/合适的做法。