std :: stringstream "str" ​​ничего не возвращает? - PullRequest
0 голосов
/ 12 декабря 2011

У меня проблемы с std::stringstream. Моя функция, как видно ниже, абсолютно ничего не возвращает. Даже при попытке использовать поток строк вне функции шаблона, он все равно ничего не возвращает, когда вызывается .str ().

template < class T > std::string toString( const T &t )
{
    std::stringstream temp;
    temp << t;
    std::cout << temp.str() << std::endl;
    return temp.str();
}

std::string test = "test" + toString( 1 );
std::cout << test << std::endl;
std::stringstream stream;
stream << "test" << 1;
std::cout << stream.str() << std::endl;

Оба эти вывода только "тест"

Fixed

Пришлось удалить _GLIBCXX_DEBUG и _GLIBCXX_DEBUG_PEDANTIC из моих макросов препроцессора.

Ответы [ 2 ]

1 голос
/ 12 декабря 2011
#include <iostream>
#include <sstream>
#include <string>

template < class T > std::string toString( const T &t )
{
    std::stringstream temp;
    temp << t;
    std::cout << temp.str() << std::endl;
    return temp.str();
}

int main(){
    std::string test = "test" + toString( 1 );
    std::cout << test << std::endl;
    std::stringstream stream;
    stream << "test" << 1;
    std::cout << stream.str() << std::endl;
}

Выходы

1
test1
test1

Для меня с Clang 3.1, GCC 4.4.5 и MSVC 10, так что ваша проблема лежит в другом месте.Пожалуйста, попробуйте только код выше в новом проекте и посмотрите, сохраняется ли проблема.Если нет, то предложения @ Industrial-antidepressant звучат вполне реалистично, т. Е. У вас где-то лучше подходящей перегрузки.

1 голос
/ 12 декабря 2011

Попробуйте ostringstream вместо stringstream.

== ОБНОВЛЕНИЕ ==

Я скомпилировал ваш код с GCC 4.6.1, и он работает как-is:

#include <iostream>
#include <sstream>

using namespace std;

template < class T > std::string toString( const T &t )
{
    std::stringstream temp;
    temp << t;
    std::cout << temp.str() << std::endl;
    return temp.str();
}

int main()
{
  std::string test = "test" + toString( 1 );
  std::cout << test << std::endl;
  std::stringstream stream;
  stream << "test" << 1;
  std::cout << stream.str() << std::endl;
  return 0;
}

Вывод:

1
test1
test1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...