Форум программистов, компьютерный форум CyberForum.ru

Как на основе того что лежит в переменной сделать переменную в объекте? - C++

Восстановить пароль Регистрация
 
 
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
23.08.2014, 20:13     Как на основе того что лежит в переменной сделать переменную в объекте? #1
1. Ну есть у нас переменная
C++
1
2
string arg1 = "MyVar";
string arg2 = "propereties";
и потом можно было обратится через объект
C++
1
cout << object.MyVar; //отобразит propereties
2. Но может такое быть что эти значения лежат еще в одном контейнере, и тогда
C++
1
string container[] = "{name:valera, x:100, y:100}","{name: vova, x:110, y:70}";//это чисто приблизительно
и потом можно было бы получить значения с помощью
C++
1
 cout << object.container[0].name; //вернет valera
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2014, 20:13     Как на основе того что лежит в переменной сделать переменную в объекте?
Посмотрите здесь:

C++ как записать в переменную символьного типа (думерный массив) несколько строк, после инициализации этой переменной?
Как в переменную записать текст, а затем в конце добавить значение переменной? C++
создал метод класса в основе которо лежит itoa C++
Где, относительно какой переменной, лежит Х C++
C++ Обязательно ли объявлять переменную для хранения адреса переменной как указатель?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
23.08.2014, 20:17     Как на основе того что лежит в переменной сделать переменную в объекте? #2
Хранить ассоциативный контейнер, где ключем будет строка, значением - какой-то объект
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
23.08.2014, 20:20  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #3
а поточнее, я нуб полный но очень чешется эту штуку реализовать.
Я соглашусь и на что-то вроде
C++
1
object.block["container"][0]["name"]
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
23.08.2014, 20:24     Как на основе того что лежит в переменной сделать переменную в объекте? #4
В простейшем случае:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <map>
#include <string>
 
int main() {
    std::map<std::string, int> m = {
        {"one", 1},
        {"two", 2}};
        
    std::cout << m["one"] << std::endl;
}
http://ideone.com/J1b8Gz

Добавлено через 1 минуту
Если нужно что-то близкое к Json, то ищем любую библиотеку работы с Json (e.g. JsonCpp).
А лучше уточнить какая задача решается.
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
23.08.2014, 20:30  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #5
А что это за <> первый раз вижу, ну ладно, сейчас будем разбираться!!!

Добавлено через 4 минуты
Задача решается написанием парсера наподобие json, ибо я уже 10 парсеров пробывал, толи я туплю, толи поезд не едет.
Но очень понравилась обработка json в java script
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
23.08.2014, 20:31     Как на основе того что лежит в переменной сделать переменную в объекте? #6
Цитата Сообщение от Валеркуй Посмотреть сообщение
А что это за <> первый раз вижу, ну ладно, сейчас будем разбираться!!!
то, что ты хочешь похоже на JSON формат данных...)
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
23.08.2014, 20:32  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #7
Это и есть он, но я чуть исковеркал)))
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
23.08.2014, 20:34     Как на основе того что лежит в переменной сделать переменную в объекте? #8
Цитата Сообщение от Валеркуй Посмотреть сообщение
Задача решается написанием парсера наподобие json
Или использованием готового и решением проблем уже с ним.
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
23.08.2014, 20:45  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #9
Цитата Сообщение от 0x10 Посмотреть сообщение
готового
ну как его использовать ну скачал я ваш парсер, пробовал его до создания темы. Что-то не вышло и я плюнул на это. Если у вас есть свободное время, пожалуйста напишите здесь как распарсить например это чудо:
JSON
1
2
3
4
5
6
7
8
{
"name":"listen",
"employees":[
    {"firstName":"John", "lastName":"Doe"}, 
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]
}
и моей радосте не будет предела

Добавлено через 1 минуту
Звпустил С++ подключил инклюды и написал в main.cpp
C++
1
2
3
4
#include <json/json.h>
int main(){
   return 0;
}
Что дальше?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
23.08.2014, 20:51     Как на основе того что лежит в переменной сделать переменную в объекте? #10
Прмеры есть в документации.
http://jsoncpp.sourceforge.net/old.html
Подробнее о сборке библиотеки и генерации документации - в redame: https://github.com/open-source-parsers/jsoncpp
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
24.08.2014, 11:13  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #11
вы так и не ответили на мой вопрос. Если нет времени так напишите, зачем стрелки переводить?
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
24.08.2014, 11:58     Как на основе того что лежит в переменной сделать переменную в объекте? #12
Цитата Сообщение от Валеркуй Посмотреть сообщение
и потом можно было бы получить значения с помощью
C++
1
 cout << object.container[0].name; //вернет valera
Валеркуй, может Вам такой вариант подойдёт:
C++
1
2
3
4
5
6
7
8
9
10
11
struct MyData
{
    string name;
    int x;
    int y;
};
 
    MyData d;
    d.name = "valera";
    d.x = 123;
    d.y = 456;
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
24.08.2014, 12:35     Как на основе того что лежит в переменной сделать переменную в объекте? #13
Цитата Сообщение от Валеркуй Посмотреть сообщение
зачем стрелки переводить?
Вопрос был:
Цитата Сообщение от Валеркуй Посмотреть сообщение
Что дальше?
Все как обычно. Библиотеку нужно собрать, подключить, написать код, который ее использует. Как сделать это все - написано подробно в документации, и я не вижу смысла копипастить, поэтому и дал прямые ссылки. Есть конкретные вопросы - задавайте, при условии что ответов на них нет в официальной документации.
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
24.08.2014, 15:28  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #14
Ключевое слово
Цитата Сообщение от 0x10 Посмотреть сообщение
собрать
как ее вообще можно собрать??? многофайлов и папок и половина без расширений потом py скрипты которых запускаешь и они ниче не делают и файлы какие-то типа dox.
Так первая папка: devtools открываю
6 py скриптов 2 json файлик и все.
Так открываю первый скрипт #module и все. Спрашивается зачем???

Следующий папка doc во, тут очень интересно!!!
doxyfile.in
многабукаф после решеток и иногда какие-то параметры капсом писали))
так тут 2 html файла открыли как и закрыли ничего содержательного....
jsoncpp.dox что за формат не совсем понятно, ну да ладно, блокнот никто не отменял!!!
Во!!! Предысловие: Это легкий формат данных бла бла и пример сразу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Configuration options
{
    // Default encoding for text
    "encoding" : "UTF-8",
    
    // Plug-ins loaded at start-up
    "plug-ins" : [
        "python",
        "c++",
        "ruby"
        ],
        
    // Tab indent size
    "indent" : { "length" : 3, "use_space": true }
}
Ага ну понятно json данные... Дальше
описаны пару особенностей не интересно...
Пока переключался обнаружил файл readme.txt ага там ссылка на сайт, качаю...
Пока качается про себя матерюсь неужели тебе в падлу было pdf файлик сделать хотябы...
Ухты я ее каким-то чудом запустил и она сгенерила мне html странички )
Ничего интересного не нашел... Нашел ссылку какую-то под жирным словом Build instructions на файл read.md
там многобукафф было и ссылки что нужно как-то собрать но как - хз.

Забрел в папку makefile там sln файл был, я его сейчас запустил думаю что делать дальше...
Запустил первый же пример там 3 проекта добавилось, вроде построилось, вылезло какое-то окошко что-то хотело ввести, я написал оно сказало нет такого файла и я я его закрыл, потом я свернус vs8 и посмотрел в ту папку где я открыл sln пару-файлов каких-то добавилось... Потом посмотрел и заметил что добавилась какая-то папка build ну что, заглянем?

Так, что видим сделал скрин прям
Картинка 1
как я помню файл с расширением lib моно подключить через линковщик, ток не знаю зачем файлы с расширением .obj?
Никогда не смотрел в файл buildlog.hml решил посмотреть))
Обнаружил что сборка была в режиме debug хм, а что если relis поставить?
И тут... Я обнаружил что кто-то вставил третий режим!!! dummy какой-то!
Компилим... ищю в деректории build этот dummy ничего не нахожу, заглянул туда где нашел sln опача а тут эта папка
Захожу, а там...
http://firepic.org/images/2014-08/24/dvwyf6b3xwvm.png
dllка? А что она тут делает? Ну да фиг с ним, решаю это дело до компиляции relis генериться еще одна либа... также как и дебаг! НО! Это был проект jsontest а я вообще то накомпилил))) Ну попытаюсь подключить...

указал в линковщике на сгенерированную lib и paragma comet
и поехали 60 ошибко виде
1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) уже определен в json_vc71_libmtd.lib(json_value.obj)

Подтверждаю тот факт что я - дебил... Думаю попутно де согрешил...
Удаляю папку где все было. Распаковываю новую!

Делаю тоже самое результат тотже))
Так, что я могу сказать: я дупачек! А вы мне помогите плиз где на так наделал...
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
24.08.2014, 16:21     Как на основе того что лежит в переменной сделать переменную в объекте? #15
Не буду отвечать на этот поток сознания по цитатам. Но выглядит это как: "Паника-паника, бегаем по каталогам, тыкаем все подряд".

1. В Readme описано два варианта сборки: с помощью CMake или SCons. Как это сделать - как раз описано, читайте внимательнее.
2. CMake и SCons генерят Мейкфайлы, проекты и т д. В случае использования студии - Солюшены.
3. Как уже было замечено, солюшен в репозиторий заботливо добавлен готовый: jsoncpp\makefiles\msvc2010\jsoncpp.sln
Поэтому нам можно ничего не генерить.
Открываем.
Вот тут вопрос: студией пользуетесь, солюшн дан, какие конкретные вопросы по сборке?

Процедура сборки стандартная для студии. Build -> Build Solution.

Все. Куча текста, но суть - открыть один файл, нажать одну кнопку.
Результат сборки - статическая библиотека jsoncpp\makefiles\msvc2010\Release\lib_json.lib
Использование стандартное - как и любой другой статической библиотеки.
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
24.08.2014, 16:52  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #16
У меня vs2008 я же говорил, подключал я эту либу, а она ошибки бьет! И много притом!!!!

Добавлено через 18 секунд
может видео снять, а?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
24.08.2014, 17:02     Как на основе того что лежит в переменной сделать переменную в объекте? #17
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ок, там рядом есть каталог vs71. В нем, как я вижу, все собирается.
Делаем одноименные сборки библиотеки и приложения. Либа, как я понимаю, собирается нормально.
Лекарство от всех болезней: в свойствах проекта приложения проверяем, что C\C++ -> Code Generation -> Runtime Library устанолен в Multi-threader (Debug) - т.е. не DLL.
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
24.08.2014, 17:13  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #18
Кликните здесь для просмотра всего текста


Добавлено через 4 минуты
Так, поставил многопоточность вроде собрался! Сейчас кое-чо модифицирую...

Добавлено через 4 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
Лекарство от всех болезней:
Чувак, ты даже не представляешь насколько ты крут!!! Я б тебя расцеловал!!! Этот еханый
Этот еханый скрипт!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <json/json.h>
#include <string>
#include <iostream>
 
using namespace std;
 
int main(){
    string config_doc = "{\"moon\":\"rex\"}";
    Json::Value root;   // will contains the root value after parsing.
    Json::Reader reader;
    bool parsingSuccessful = reader.parse(config_doc,root);
    if ( !parsingSuccessful )
    {
        // report to the user the failure and their locations in the document.
        std::cout  << "Failed to parse configuration\n"
                   << reader.getFormattedErrorMessages();
        return 0;
    }
    std::string moon = root.get("moon", "no-moon" ).asString();
    cout << "moon: "<< moon <<endl;
    system("pause");
    return 0;
}
ОН ПАРСИТСЯ!!!!
Валеркуй
 Аватар для Валеркуй
2 / 2 / 0
Регистрация: 17.06.2013
Сообщений: 120
26.08.2014, 18:02  [ТС]     Как на основе того что лежит в переменной сделать переменную в объекте? #19
Цитата Сообщение от 0x10 Посмотреть сообщение
Есть конкретные вопросы - задавайте, при условии что ответов на них нет в официальной документации.
Привет дружище! Ты говорил можно задавать конкретные вопросы, у меня конкретный вопрос:
Есть json
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    "map_w_size":"15",
    "map_h_size":"5",
    "tile":"c:/tile.png",
    "map" : [
            {
                "x":"50",
                "y":"100"
            },
            {
                "x":"1",
                "y":"5"
            }
    ]
}
Как считать то что в []. там только значения в примере читались

Добавлено через 10 минут
Пытаюсь считать хотя б на дисплей, приложение запускается но сразу выводит ошибку.
C++
1
2
3
4
5
    const Json::Value map = root["map"];//считываем объекты
 
        for(int i=0; i < map.size(); ++i){
            cout << map[i].asString() << endl;
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2014, 18:02     Как на основе того что лежит в переменной сделать переменную в объекте?
Еще ссылки по теме:

Верно ли, что в основе фабрики лежит наследование классов? C++
C++ Как сделать переменную строковой C++
Как сделать браузер на основе Chromium? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.08.2014, 18:02     Как на основе того что лежит в переменной сделать переменную в объекте? #20
Цитата Сообщение от Валеркуй Посмотреть сообщение
Как считать то что в []
http://jsoncpp.sourceforge.net/class...1_1_value.html
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <string>
 
#include <jsoncpp/json/json.h>
 
int main() {
    const std::string json_str = R"(
        {
            "map_w_size": 15,
            "map_h_size": 5,
            "tile": "c:/tile.png",
            "map": [
                {
                    "x": 50,
                    "y": 100
                },
                {
                    "x": 1,
                    "y": 5
                }
            ]
        }
    )";
 
    Json::Reader reader;
    Json::Value root;
 
    reader.parse(json_str, root);
 
    for (const auto& point : root["map"]) {
        std::cout << point["x"].asInt() << ", " << point["y"].asInt() << std::endl;
    }
}
Yandex
Объявления
26.08.2014, 18:02     Как на основе того что лежит в переменной сделать переменную в объекте?
Ответ Создать тему
Опции темы

Текущее время: 09:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru