Ошибки stringstream С++

Я пытаюсь понять, как работает stringstream, чтобы иметь возможность идентифицировать и преобразовывать возможные числа, которые были введены как строки... по какой-то причине этот небольшой фрагмент кода, который я написал, чтобы попытаться понять stringstream, раздражаясь несколькими ошибками...

#include <iostream>
#include <string>

using namespace std;

int str2int (const string &str) {
  std::stringstream ss(str);
  int num;
  if((ss >> num).fail())
  { 
      num = 0;
      return num;
  }
  return num;
}

int main(){
    int test;
    int t = 0;
    std::string input;
    while (t !=1){
        std::cout << "input: ";
        std::cin >> input;
        test = str2int(input);
        if(test == 0){
            std::cout << "Not a number...";
        }else
            std::cout << test << "\n";
        std::cin >> t;
    }
    return 0;
}

Ошибки:

Error C2079:'ss' uses undefined class std::basic_stringstream<_elem,_traits,_alloc>'
Error C2228: left of '.fail' must have class/struct/union
Error C2440: 'initializing': cannot convert 'const std::string' into 'int'

что я делаю неправильно?

Ответ 1

Вам нужно включить следующий заголовочный файл -

#include <sstream>

Всякий раз, когда вы видите ошибки типа undefined class, вы всегда должны искать недостающие файлы заголовков.

Здесь - документация для класса stringstream.

Ответ 2

Чтобы использовать stringstream, вам нужно сделать;

#include <sstream>

После этого все работает так, как должно.

Ответ 3

Вам нужно включить sstream.

#include <sstream>

Ответ 4

Мне нужно добавить - если ваш проект использует предварительно скомпилированные заголовки (например, "stdafx.h" для консольного приложения Win32 или "pch.h" для приложения Windows Store) - убедитесь, что они включены впереди из <sstream>.

Ответ 5

Включите это:

#include <sstream>

Также напишите:

if(ss >> num) //no .fail()
{ 
   return num; //read succeeded
}
return 0; //read failed

Кстати, вы могли бы использовать std::cin >> test в самой main() как:

int main(){
    int test;
    int t = 0;
    while (t !=1){
        std::cout << "input: ";
        if (std::cin >> test)
             std::cout << test << "\n";  //read succeeded
        else 
             std::cout << "Not a number...";  //read failed
        std::cin >> t;
    }
    return 0;
}

Нет необходимости в функции str2int!