0

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

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

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

代替:

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

然后我尝试编译该项目,但出现了一百多个错误,所有这些都是关于编译器无法从const wchar/char *to转换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指向接口虚拟类对象的指针在哪里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);
4

2 回答 2

1

不能在 VS19 中从 'const char*' 转换为 'char*',尽管早期版本可以

根据文档:/permissive-(标准一致性)

默认情况下,/permissive- 选项在由 Visual Studio 2017 版本 15.5 及更高版本创建的新项目中设置。在早期版本中默认情况下未设置。设置该选项后,当在您的代码中检测到非标准语言结构时,编译器会生成诊断错误或警告。这些结构包括 C++11 之前代码中的一些常见错误。

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

于 2021-04-08T07:01:22.820 回答
-1

似乎代码在 godbolt.org 上对我来说是正常工作的

https://godbolt.org/z/nGz3hcG3c

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

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

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

于 2021-04-07T19:09:16.763 回答