目录
error LNK2005: _XXX已经在xxx.obj中定义
error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
STL1003: Unexpected compiler, expected C++ compiler
error C2039: "wait_for" 不是 "winrt::impl" 的成员
持续更新中......
error LNK2005: _XXX已经在xxx.obj中定义
出现原因
项目中有多个源文件或者头文件时,include得太多太杂,导致有些变量重复定义。
解决方法
- 找出重复定义的变量位置,并修改。
- 忽略第二次定义的提示,继续运行,设置如下:
右键项目名称->属性->配置属性->链接器->命令行 中添加代码"/FORCE:MULTIPLE"即可。
error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
出现原因
由于编译器SDL安全检查认为这一操作(通常是为无符号整形取负的操作)无效而产生的。
解决方法
右键项目名称->属性->C/C++->常规:SDL检查,选择否
STL1003: Unexpected compiler, expected C++ compiler
出现原因
在
C
文件中引用了C++
的头文件。解决方法
头文件引用错误,重新引用头文件
error C2039: "wait_for" 不是 "winrt::impl" 的成员
出现原因
Windows SDK 中附带的 C++/WinRT 版本相当旧,无法按照较新的编译器的更严格的一致性期望进行编译。
解决方法
方法一、将符合模式改为 否 (/permissive),然后重新编译.
方法二、更新WinRT 右键项目名称->管理NuGet程序包...-> 输入 "Microsoft.Windows.CppWinRT"->安装
error C2872: “byte”: 不明确的符号
出现原因
C++17引入了类型std::byte,代码中使用了using namespace std 与原C++定义的unsigned char byte冲突;或者其它重名冲突。C++17还引进了std::array ,std::size,也会导致同样的问题。
解决方法
方法一、如果代码中加了using namespace std ,可以将它移除;
方法二、更改C++
方法三、添加宏 _HAS_STD_BYTE 0 ,如下
#ifdef _HAS_STD_BYTE #undef _HAS_STD_BYTE #endif #define _HAS_STD_BYTE 0