无法在 VS19 中从 'const char*' 转换为 'char*',尽管之前可以

Can not covert from 'const char*' to 'char*' in VS19, although earlier could

我今天买了一个 Surface Go 2,并安装了 Visual Studio 2019。我加载了我的项目,在我以前的 PC 上成功编译,也在 VS19 中。

我注意到的第一个问题是 VS 编辑器在我的 .cpp 文件中将 Unicode 字符(西里尔文)显示为象形文字:

card->NewTextW(L"Çàãðóçêà", ...

而不是:

card->NewTextW(L"Загрузка",

然后我尝试编译这个项目,但得到了一百多个错误,而且都是关于编译器无法从 const wchar/char * 转换为 wchar/char *,虽然,我重复,早些时候,在另一台 PC 上,一切都编译成功。几乎所有类型的字符串都会出现此错误,并且对于编码错误的字符串(如上所述)和没有编码的字符串都会出现。

错误的具体例子

card->NewTextW(L"Çàãðóçêà", 3, r.right/2-50, r.bottom / 2 - 350 / 2 - 80 + 350 + 60, 10, 20, RGB(0, 0, 0));
card->NewText("eng-string", 4, r.right/2-50, r.bottom / 2 - 350 / 2 - 80 + 350 + 60, 10, 20, RGB(0, 0, 0));

其中 card 是指向虚拟接口对象的指针 class ICard:

class ICard
{
public:
...
virtual void NewTextW(wchar_t *text, int id, int x, int y, int divid, int j, COLORREF col) = 0;
virtual void NewText(char *text, int id, int x, int y, int divid, int j, COLORREF col) = 0;
...
}card*;

没有错误的具体例子

MessageBoxA(NULL, "aga", "uogou", MB_OK);

看来代码在 godbolt.org

上对我来说是有效的

https://godbolt.org/z/nGz3hcG3c

不需要将参数更改为 const 或任何其他...

我确实收到了使用 gcc 而不是 msvc 的警告

这看起来像是您这边的编译器问题,而不是 msvc19 我想知道您的 VS 安装是否有将警告视为错误的设置? 查看 以禁用此选项。

Cannot covert from 'const char*' to 'char*' in VS19, although earlier version could

根据文档:/permissive- (Standards conformance)

By default, the /permissive- option is set in new projects created by Visual Studio 2017 version 15.5 and later versions. It's not set by default in earlier versions. When the option is set, the compiler generates diagnostic errors or warnings when non-standard language constructs are detected in your code. These constructs include some common bugs in pre-C++11 code.

在我看来,这很好地解释了为什么这个错误没有出现在早期版本中。