C ++ Stringstream int в строку, но возвращает ноль - PullRequest
0 голосов
/ 19 марта 2010

Привет ниже моя функция:

string Employee::get_print(void) {

   string out_string;
   stringstream ss;

   ss << e_id << " " << type << endl;
   out_string = ss.str();

   return out_string;
}

e_id и type являются int и содержат значения из класса Employee. Но когда я передаю их в поток строк, они просто очищают строку, когда я пытаюсь ее вставить. Но если у меня нет int в ss << "Some text" << endl;, то это нормально. Что я делаю не так = S

// Edit

Ok; Это телефонный код:

tmp = cur->get_print();

Где tmp - строка, а cur - объект Employee.

Этот код ...

stringstream out; 
out << "Test " << e_id << " " << e_type; 
return out.str(); 

Перезапускает "Тест" и ничего больше. Если я достану "Test " <<, моя возвращенная строка будет ""

Я использую GCC 4.2 в Mac OS / X 10.6.2, если это имеет какое-либо значение.

Ответы [ 5 ]

1 голос
/ 20 марта 2010

Я перешел в Netbeans, и у меня нет этой проблемы. Так что это проблема с Xcode.

1 голос
/ 19 марта 2010

Я тоже не могу воспроизвести эту ошибку. Как уже упоминалось, не включайте endl, так как это фактически добавляет \n и, как предполагается, очищает буфер записи. Для этого использования это совершенно не нужно и может фактически привести к нежелательным результатам ... Однако, код в вашем редактировании / обновлении прекрасно работает для меня.

int main(int argc, char* argv[])
{
   int e_id = 5;
   int e_type = 123456;
   stringstream out; 
   out << "Test " << e_id << " " << e_type;
   cout << out.str();
   return 0;
}

Производит:

Test 5 123456

Я бы посоветовал еще раз проверить, что e_id и e_type действительно являются просто родными int.

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

out << "Test " << (int)e_id << " " << (int)e_type;

Поскольку я не могу воспроизвести эту ошибку, я боюсь, что больше не могу помочь. Но удачи тебе!

1 голос
/ 20 марта 2010

Хорошо, я понятия не имею, что происходит с stringstream Я пытался использовать его в других частях моего кода, и он не работает с целыми числами. Поэтому я вернулся к использованию функции sprintf C:

string Employee::get_print(void) {

   char out[50];

   sprintf(out, "%d %d", e_id, e_type);

   string output = out;

   return output;
} 

Возвращает нужную строку.

0 голосов
/ 20 ноября 2013

У меня точно такая же проблема - GCC и stringstream ничего не возвращают.

Как я выяснил, хитрость в том, что вы должны поместить некоторые текстовые данные , прежде чем что-либо еще, в поток строк.

Этот код ...

stringstream ss(stringstream::out);
ss << 3.14159;
cout << "'" << ss.str() << "'" << endl;

получает вам этот результат:

''

Но если мы сначала поместим один "" в поток строк ...

stringstream ss(stringstream::out);
ss << "" << 3.14159;
cout << "'" << ss.str() << "'" << endl;

результат, как и ожидалось:

'3.14159'
0 голосов
/ 19 марта 2010

Я думаю, что endl не нужен. Вам нужно написать endl, только если вы хотите написать новую строку в файле на std :: cout.

Поскольку вы пишете endl, ваш поток строк будет содержать строку из 2 строк, вторая из которых пуста. Это, вероятно, смущает вас. Удалите endl, чтобы получить только одну строку.

...