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最简单解决办法

warning C4819最简单解决办法

warning C4819最简单解决办法

经验分享:如何解决VS编译器下面的C4819警告?两种方法

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失