【问题标题】:"sf::Unicode::Text::text" member function already defined or declared"sf::Unicode::Text::text" 成员函数已定义或声明
【发布时间】:2012-08-16 23:04:45
【问题描述】:

我最近设法为 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 编译器

【问题讨论】:

  • 不知道,但通常我会查看源代码的预处理版本(myfile.cpp)。通常选项是 -E,但可能因编译器而异。类似:CC -E &lt;other options&gt; my.cpp &gt; preprocessed.cpp,--edit-- 您需要使用所有其他 cmd 行选项,以正常传递给 CC。
  • 根据source code,最可能的原因是你在某个地方有typedef wchar_t Unit16,或者typedef Uint16 wchar_t
  • @Lol4t0,这不可能我什至没有碰它,但我会看看。
  • @可能取决于配置和系统头文件。
  • 鉴于您将其与 Qt 相结合,我似乎记得这可能是由您的 Qt 配置引起的。也就是说,您的 qmake.conf 中可能启用了 Zc:wchar_t 选项...也许这已经给了您一些 Google-fu。

标签: c++ qt-creator sfml


【解决方案1】:

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

QMake 将编译器选项 treat wchar_t as a built-in type 设置为 false,使 wchar_t 成为 unsigned short 的 typedef,这使得 unsigned shortwchar_t 重载的函数(如 sf::Unicode::Text构造函数)失败...

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

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

【讨论】:

    【解决方案2】:

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

    如果指定了 /Zc:wchar_t-,编译器会要求您定义 wchar_t 或包含定义它的众多头文件之一(例如 wchar.h)。通常,wchar_t 被定义为一个无符号的 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;
    

    所以他们是平等的

    【讨论】:

    • 知道如何在 qt creator 中设置它吗?
    • @ThePlan 在我的时代,我用 g++ 的标志完成了它。现在正在寻找它。
    • @ThePlan 看起来这是 QT 不使用内置 wchar_t 的错误。顺便问一下你的编译器和操作系统是什么,所以我们可以给你更好的解决方案。
    • 我正在运行 windows XP SP3 并使用 Mingw
    猜你喜欢
    • 2016-12-09
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多