Ответ 1
Вам нужно включить следующий заголовочный файл -
#include <sstream>
Всякий раз, когда вы видите ошибки типа undefined class
, вы всегда должны искать недостающие файлы заголовков.
Здесь - документация для класса 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'
что я делаю неправильно?
Вам нужно включить следующий заголовочный файл -
#include <sstream>
Всякий раз, когда вы видите ошибки типа undefined class
, вы всегда должны искать недостающие файлы заголовков.
Здесь - документация для класса stringstream
.
Чтобы использовать stringstream, вам нужно сделать;
#include <sstream>
После этого все работает так, как должно.
Вам нужно включить sstream.
#include <sstream>
Мне нужно добавить - если ваш проект использует предварительно скомпилированные заголовки (например, "stdafx.h"
для консольного приложения Win32 или "pch.h"
для приложения Windows Store) - убедитесь, что они включены впереди из <sstream>
.
Включите это:
#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
!