C++ 错误 - C4819、C2761、C2447
Posted
技术标签:
【中文标题】C++ 错误 - C4819、C2761、C2447【英文标题】:C++ errors - C4819, C2761, C2447 【发布时间】:2018-03-30 01:04:39 【问题描述】:我正在使用 Visual Studio 2017 来了解 SFML 和精灵动画,但我无法运行此代码。
我已使用编码“Unicode(带签名的 UTF-8)-代码页 65001”保存它。
#include <iostream>
#include <SFML/Graphics.hpp>
int main()
// Create the main window
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
// Load a sprite to display
sf::Texture texture;
if (!texture.loadFromFile("professor_walk_cycle_no_hat.png"))
return EXIT_FAILURE;
sf::Sprite sprite(texture);
// Start the game loop
while (window.isOpen())
// Process events
sf::Event event;
while (window.pollEvent(event))
// Close window: exit
if (event.type == sf::Event::Closed)
window.close();
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
// Update the window
window.display();
return EXIT_SUCCESS;
我收到以下错误/警告:
警告 C4819 文件包含当前代码页 (949) 中无法表示的字符。将文件保存为 Unicode 格式以防止数据丢失 HelloSFML 行:1
严重性代码描述项目文件行抑制状态 错误 C2761“ctor”:不允许重新声明成员行:3
严重性代码描述项目文件行抑制状态 错误 C2447 '':缺少函数头(旧式正式列表?)行:4
【问题讨论】:
int main()
应该是int main(int argc, char **argv)
您确定将其编译为 C++ 而不是 C?最后一个错误看起来像是认为这是一个 C 程序。
@Barmar 是的,它是 C++
@Barmar 不一定,不。这个例子是完全合法的。
@EricAhn 您使用的是什么版本的 Windows 以及哪种语言?
【参考方案1】:
您的代码没有我们可以看到的不可见的非 unicode 字符,但是当您的系统区域设置为韩语时,您确实会得到warning C4819。
要摆脱这种情况,除了将源文件保存为 UTF-8(您已这样做)之外,您还必须为 Visual C++ 编译器指定 /utf-8
选项。方法如下:
打开项目属性页对话框。 展开配置属性、C/C++、命令行文件夹。 在高级选项中,添加 /utf-8 选项,并指定您的首选 编码。 选择“确定”以保存更改。
(https://msdn.microsoft.com/en-us/library/mt708821.aspx)
除此之外...我无法重现错误 C2761 和 C2447。代码编译并运行没有问题。这不是 C 编译(相对于 C++)的问题,否则会出现更严重的错误。如果/utf-8
仍然存在,请告诉我,以便我进行更多调查。
【讨论】:
很抱歉回答的太晚了,我厌倦了这个错误,我重新安装了 VS 2017,现在它可以工作了,我什至不知道为什么...... @EricAhn 很有趣。谢谢你让我知道。问候。以上是关于C++ 错误 - C4819、C2761、C2447的主要内容,如果未能解决你的问题,请参考以下文章
warning C4819 解决方案 warning C4819: The file contains a character that cannot be represented in the cu
warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失