2012-03-22 81 views
11

我想了解stringstream作品为了如何能够识别并转换是被输入的字符串作为可能的数字...由于某种原因,这一小段代码,我写了尝试和了解stringstream是被恼人的几个错误...stringstream的错误C++

#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

不是错误消息背后的原因,但有一件事你错误的是使用'stringstream',当你应该使用'istringstream'。 (使用'fail'也不是很习惯。) – 2012-03-22 09:33:13

回答

22

您需要包括下面的头文件 -

#include <sstream> 

每当你看到这样undefined class错误,你应该总是寻找第一个丢失的头文件。

Herestringstream类的文档。

1

包含此:

#include <sstream> 

而且,这样写:

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

顺便说一句,你可以在main()使用std::cin >> test本身:

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功能!

+1

或者简单的'return ss >> num? num:0;'? (尽管我可能会将'>>'分隔成单独的语句。'ss >> num; return ss?num:0;'。) – 2012-03-22 09:35:02

+0

@JamesKanze:很好。 :-) – Nawaz 2012-03-22 09:42:11

3

要使用stringstream,您需要做;

#include <sstream> 

之后,似乎一切工作,因为它应该。

+0

smdh ...我应该去睡觉哈哈。那种缺乏关注是不可接受的......谢谢。 – 2012-03-22 05:44:52

3

你需要包括sstream。

#include <sstream>

2

我需要添加 - 如果您的项目使用预编译头(例如,"stdafx.h"适用于Windows商店应用的Win32控制台应用程序或"pch.h") - 请检查它们包括提前<sstream>