include <sstream>не работает в Xcode 9.2 - PullRequest
0 голосов
/ 15 мая 2018

Я сейчас изучаю c ++ и столкнулся с проблемой, пытаясь объединить строки и числа, потому что sstream не работает для меня.

Я получил следующие ошибки:

Недопустимые операнды для двоичного выражения ('basic_string, std :: __ 1 :: allocator>' и 'int').

Код выглядит следующим образом:

#include <iostream>
#include <sstream>
using namespace std;

int main() {
    string name = "Jane";
    int age = 28;

    string info = "Name: " + name + "; age:" + age;
    cout >> info >> endl;

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Ваша проблема не в sstream, а в следующей строке:

string info = "Name: " + name + "; age:" + age;

Все выглядит хорошо и хорошо до "; age:" + age. Вы не можете добавить string и int. Вы можете использовать std::to_string для преобразования int в string:

string info = "Name: " + name + "; age:" + to_string(age);

to_string был добавлен в C ++ 11, но если по какой-либо причине вы не можете использовать C ++ 11, вы можете определить эту функцию самостоятельно, используя stringstreams:

template <typename T>
string to_string(const T &thing) {
    std::ostringstream oss;
    oss << thing;
    return oss.str();
}

Также обратите внимание, что вы используете оператор извлечения на cout. Вы, вероятно, имели в виду это:

cout << info << endl;
0 голосов
/ 15 мая 2018

Чтобы использовать поток строк для создания новой строки, которая объединяет строки и другие типы, вам потребуется что-то вроде этого:

 int meaning = 42;
 ostringstream os;
 os << "The meaning of life is " << meaning;
 string s = os.str();
...