2016-04-12 21 views
0

MSVC2013で 'QJsonObject :: iterator'を使用しようとすると奇妙なエラーが発生します。エラー:C2039: 'ポインタ': 'QJsonObject :: iterator'のメンバーではありません

Iは、以下の例がありますMSVC2008(ひるみにクロスコンパイル)とMinGWのと期待どおり

#include <QCoreApplication> 
#include <QJsonObject> 
#include <QDebug> 
#include <algorithm> 

void processValue(QJsonValue value) { 
    qDebug() << value.toString(); 
} 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    QJsonObject jsonObject; 
    jsonObject.insert("a", "A"); 
    jsonObject.insert("b", "B"); 
    jsonObject.insert("c", "C"); 
    jsonObject.insert("d", "D"); 
    jsonObject.insert("e", "E"); 

    std::for_each (jsonObject.begin(), jsonObject.end(), processValue); 

    return a.exec(); 
} 

このコードはなくMSVC2013と、コンパイルおよび動作。すべてのケースで、Qt 5.5.1を使用しています。

エラーメッセージは次のとおりです。私はちょうど2つの他のコンパイラで偶然に動作するように起こることを、ここでは何も悪いことを

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : error C2039: 'pointer' : is not a member of 'QJsonObject::iterator' 
     c:\qt\qt5.5.1msvc\5.5\msvc2013\include\qtcore\qjsonobject.h(96) : see declaration of 'QJsonObject::iterator' 
     C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(584) : see reference to class template instantiation 'std::iterator_traits<_InIt>' being compiled 
     with 
     [ 
      _InIt=QJsonObject::iterator 
     ] 
     C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\algorithm(31) : see reference to function template instantiation 'void std::_Debug_range<_InIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t)' being compiled 
     with 
     [ 
      _InIt=QJsonObject::iterator 
     ] 
     ..\QJsonObjectIteratorIssue\main.cpp(21) : see reference to function template instantiation '_Fn1 std::for_each<QJsonObject::iterator,void(__cdecl *)(QJsonValue)>(_InIt,_InIt,_Fn1)' being compiled 
     with 
     [ 
      _Fn1=void (__cdecl *)(QJsonValue) 
,   _InIt=QJsonObject::iterator 
     ] 
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : error C2146: syntax error : missing ';' before identifier 'pointer' 
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : error C2602: 'std::iterator_traits<_InIt>::pointer' is not a member of a base class of 'std::iterator_traits<_InIt>' 
     with 
     [ 
      _InIt=QJsonObject::iterator 
     ] 
     C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : see declaration of 'std::iterator_traits<_InIt>::pointer' 
     with 
     [ 
      _InIt=QJsonObject::iterator 
     ] 
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : error C2868: 'std::iterator_traits<_InIt>::pointer' : illegal syntax for using-declaration; expected qualified-name 
     with 
     [ 
      _InIt=QJsonObject::iterator 
     ] 

やっているだろうか?

答えて

関連する問題