Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost и Tiny JSON. Как собрать? 
:(
    Опции темы
neosapient
  Дата 7.7.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Добрый день.

(Вопрос выглядит громоздко, постарался максимально упростить)

Пытаюсь запустить парсер для текста размеченного JSON (JavaScript Object Notation http://json.org/ , в википедии http://ru.wikipedia.org/wiki/JSON) .
Выбрал TinyJSON (http://blog.beef.de/projects/tinyjson/)

Скачал boost версии 1.35. Настроил пути, собрал и протрансировал код
Код

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include "tinyjson.hpp"

typedef std::string Iterator;

int main(void)
{
    Iterator strInput =       " { \"zero\": 0,\"one\": 1}"
;
    //strInput << "hello";
        //std::string
    printf("hello world");
       // strInput contains the JSON code as std::string
 
   json::grammar<char>::variant v
          = json::parse(strInput.begin(), strInput.end());
 
   if(v->type() != typeid(json::grammar<char>::object))
   {
      // ERROR: parsing failed (bad format)
      return false;
   }
   // traverse(&v);
   // further processing of the JSON object model

}



Вроде прошло без ошибок.

Затем подключил функцию traverse,
Код

void traverse(json::grammar<char>::array const * var)
{
   if(var->empty())
   {
      // variant is empty => it's a "null" value
   }
   else if(var->type() == typeid(bool))
   {
      // variant is of type "bool"...
      bool bValue = boost::any_cast< bool >(*var);
   }
   else if(var->type() == typeid(int))
   {
      // variant is of type "int"...
      int iValue = boost::any_cast< int >(*var);
   }
   else if(var->type() == typeid(double))
   {
      // variant is of type "double"...
      double dValue = boost::any_cast< double >(*var);
   }
   else if(var->type() == typeid(std::string))
   {
      // variant is a string...
      std::string strValue = boost::any_cast< std::string >(*var);
   }
   else if(var->type() == typeid(json::grammar<char>::array))
   {
      // variant is an array => use recursion
      json::grammar<char>::array const & a = boost::any_cast< json::grammar<char>::array >(*var);
 
      for(json::grammar<char>::array::const_iterator it = a.begin(); it != a.end(); ++it)
      {
         traverse(*it);
      }
   }
   else if(var->type() == typeid(json::grammar<char>::object))
   {
      // variant is an object => use recursion
      json::grammar<char>::object const & o = boost::any_cast< json::grammar<char>::object >(*var);
 
      for(json::grammar<char>::object::const_iterator it = o.begin(); it != o.end(); ++it)
      {
         std::string strName = (*it).first;
         traverse((*it).second);
      }
   }
   else
   {
      // ERROR: unknown type...
   }
}



В результате сборки появляются ошибки:
Код

n.cpp(14) : error C2039: 'type' : is not a member of 'std::deque<_Ty>'
        with
        [
            _Ty=json::grammar<Char>::variant
        ]
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(19) : error C2039: 'type' : is not a member of 'std::deque<_Ty>'
        with
        [
            _Ty=json::grammar<Char>::variant
        ]
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(24) : error C2039: 'type' : is not a member of 'std::deque<_Ty>'
        with
        [
            _Ty=json::grammar<Char>::variant
        ]
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(29) : error C2039: 'type' : is not a member of 'std::deque<_Ty>'
        with
        [
            _Ty=json::grammar<Char>::variant
        ]
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(34) : error C2039: 'type' : is not a member of 'std::deque<_Ty>'
        with
        [
            _Ty=json::grammar<Char>::variant
        ]
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(41) : error C2664: 'traverse' : cannot convert parameter 1 from 'const std::allocator<_Ty>::value_type' to 'const json::grammar<Char>::array *'
        with
        [
            _Ty=json::grammar<Char>::variant
        ]
        and
        [
            Char=char
        ]
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(44) : error C2039: 'type' : is not a member of 'std::deque<_Ty>'
        with
        [
            _Ty=json::grammar<Char>::variant
        ]
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(52) : error C2664: 'traverse' : cannot convert parameter 1 from 'const json::grammar<Char>::variant' to 'const json::grammar<Char>::array *'
        with
        [
            Char=char
        ]
        and
        [
            Char=char
        ]
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(78) : error C2664: 'traverse' : cannot convert parameter 1 from 'json::grammar<Char>::variant *' to 'const json::grammar<Char>::array *'
        with
        [
            Char=char
        ]
        and
        [
            Char=char
        ]
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


Помогите собрать демонстрационный пример.

-------
Доп. сведения: Windows XP, VC7
Пример в приложении.


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  tinyjsontest.rar 5,96 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0404 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.