C ++, возвращающий stringstream.str () - PullRequest
       17

C ++, возвращающий stringstream.str ()

1 голос
/ 21 сентября 2011

У меня есть статический метод, который должен вернуть следующий доступный идентификатор.Несколько статических членов в других классах вызывают эту функцию, поэтому каждому из них присваивается другой идентификатор.Однако, когда я печатаю назначенные значения, я не получаю «id0», «id1», а просто символ, такой как «*».Я использую этот код:

    int A::i = 0; //static member

std::string A::id()
{
    std::stringstream sst; 
    sst<< "id" << A::i;

    i++;

    return sst.str(); //i've tried to return a const char* too, but doesnt work either
}


   //assigning id's in several classes like this: 
   const char* B::id = A::id().c_str(); 
   const char* C::id = A::id().c_str(); 


   //printing them in the main function: 
   std::cout << B::id << " " << C::id << "\n";

Я не понимаю, почему приведенный выше код не работает.Когда я выполняю следующий код, выводится ожидаемый результат «id10»:

    static std::string  gt()
    {
         std::stringstream ss; 
         ss << "id" << 10;

         return ss.str();
    }

1 Ответ

6 голосов
/ 21 сентября 2011

Посмотрите на

const char* C::id = A::id().c_str(); 

Вы создаете новую строку идентификатора, затем берете указатель на ее данные (в виде c-строки) и сразу после этого временную строку, к содержимому которой вы принадлежите.указание разрушается.Простой ответ: либо придерживайтесь std::string, либо просто int идентификаторов.

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