0

我最近设法为 qt creator 设置了 SFML,但是在编译下面的代码后,我得到了三个与我的程序无关的奇怪错误。我必须指定其他 C++ 程序运行良好。这是代码:

#include <SFML/System.hpp>
#include <iostream>

int main()
{
    sf::Clock Clock;
    while (Clock.GetElapsedTime() < 5.f)
    {
        std::cout << Clock.GetElapsedTime() << std::endl;
        sf::Sleep(0.5f);
    }

    return 0;
}

错误如下:

f:\SFML-1.6\include\SFML\System\Unicode.hpp:82: error: C2535: 'sf::Unicode::Text::Text(const wchar_t *)' : member function already defined or declared

f:\SFML-1.6\include\SFML\System\Unicode.hpp:87: error: C2535: 'sf::Unicode::Text::Text(const std::wstring &)' : member function already defined or declared

f:\SFML-1.6\include\SFML\System\Unicode.hpp:99: error: C2535: 'sf::Unicode::Text::operator std::wstring(void) const' : member function already defined or declared

知道可能是什么原因造成的吗?

编辑:

我还应该提到我从未接触过给出错误的文件。我所尝试的只是粘贴来自 SFML 网站的示例代码,这导致了上述错误。我相信我已经正确设置了 SFML。

EDIT2: 我使用的是 Windows XP SP3,Mingw 编译器

4

2 回答 2

1

我很久以前就遇到过这个问题,唯一对我有用的解决方案和解释(复制自我最初咨询的另一个论坛帖子):

QMake 将编译器选项设置treat wchar_t as a built-in typefalse,将wchar_ttypedef 设置为unsigned short,这使得函数重载unsigned short并且wchar_t(如 sf::Unicode::Text构造函数)失败......

我认为除了修改 SFML 源之外,唯一的解决方案是将您的 \mkspecs\win32-msvc2008\qmake.conf 文件中的选项“Zc:wchar_t”更改为“-Zc:wchar_t”。然后可能重新编译Qt。

我更改了我的配置文件并重新编译了 qt,它已经开始发挥作用。

于 2012-08-25T14:19:08.447 回答
0

根据http://msdn.microsoft.com/en-us/library/dh8che7s%28v=vs.80%29.aspx

如果指定了 /Zc:wchar_t-,编译器会要求您定义 wchar_t 或包含定义它的众多头文件之一(例如 wchar.h)。通常,wchar_t 被定义为 unsigned short

在 Visual Studio 开发环境中设置此编译器选项

Open the project's Property Pages dialog box. For details, see Modifying Project Settings.

Click the C/C++ folder.

Click the Language property page.

Modify the Treat wchar_t as Built-in Type property.

所以问题在于 Config.hpp

typedef unsigned short Uint16;

和这个 /Zc:wchar_t 选项 wchar_t 是

typedef unsigned short wchar_t;

所以他们是平等的

于 2012-08-25T14:24:14.187 回答