2016-01-30 3 views
-2

Как вернуть переменную с другим типом, чем тип функции?Возвращает переменную другого типа, чем тип функции

Это мой код:

String wyslij(String cmd, boolean parse = false) { 
    wifi.println(cmd); 
    String response = ""; 
    bool beg = false; 
    if(parse == true){ 
    (more code but this is not important) 

    JsonObject& root = jsonBuffer.parseObject(response); 

    return root; //how? 

    } 
return wifi.readString(); 
} 

Я хотел бы вернуться «корень», как я могу это сделать?

Спасибо!

+0

это выглядит как Java, почему она помечена как C++? – bgarcia

+0

Soooo, почему вы не можете просто изменить его, чтобы не вернуть строку? – bpgeck

+0

Что такое 'JsonObject &'? Это не Ява. –

ответ

1

Строго говоря, вы не можете. Создание союза или специальной структуры только для прохождения может дать вам то, что вы хотите. Будет ли это хорошей идеей или нет, зависит от того, что делает ваш вызывающий абонент.

Edit: Вот один из способов:

String wyslij(String cmd, boolean parse = false, JsonObject * obj = NULL) { 
    wifi.println(cmd); 
    String response = ""; 
    bool beg = false; 
    if(parse == true && obj != NULL){ 
    (*obj) = jsonBuffer.parseObject(response); 
    } 
    return wifi.readString(); 
} 

void Caller() { 
    JsonObject root; 
    String ret_val = wyslij(cmd, true, &root); 
    /* do things with root */ 
} 

Это может не работать, в зависимости от побочных эффектов, связанных с принятием JsonObject (между прочим), но это даст вам суть.

+0

Итак, я хотел бы использовать значение «root» вне функции - как я могу это сделать? Возможно, скопировать значение «root» в другую (общедоступную) переменную? – Marcin

+0

Есть много способов удержать этот объект где-то или вернуть его для использования в другом месте. Скопируйте его на глобальную работу, хотя это плохая привычка. Возврат соединения или класса (который вы определите в другом месте) будет работать. Наличие другой функции для выполнения синтаксического разговора с статическим 'JsonObject' будет работать (вроде). Создание такой строки, как предложения bgarcia, будет работать, если вам просто нужна строка. Способ, который имеет наибольший смысл, будет зависеть от остальной части вашего кода и от того, что эта функция должна делать в первую очередь. – user2475059

+0

Кроме того, что делает функция с именем 'wyslij', в любом случае? – user2475059

0

Вы не можете нарушать систему языкового типа.

вы должны, однако быть в состоянии получить строковое представление таких как с root.toString() или метода эквивалентного класса

+0

Итак, я хотел бы использовать значение «root» вне функции - как я могу это сделать? Возможно, скопировать значение «root» в другую (общедоступную) переменную? – Marcin

+0

Нужно ли возвращать String? – bgarcia

+0

нет, ему не нужно возвращать String – Marcin

Смежные вопросы