2012-03-22 32 views
11

文字列として入力された可能な数字を特定して変換できるようにするにはどうすればよいか理解しようとしています...何らかの理由でこの小さなコードを試してみてください。stringstreamstringstreamエラーC++

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 <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; 
} 

エラー誤差の少ない迷惑?

+1

エラーメッセージの背後に理由はありませんが、あなたが間違っていることの1つは 'istringstream'を使うべきときに' stringstream'を使うことです。 ( 'fail'の使用はあまり慣用的ではありません) –

答えて

22

次のヘッダーファイル含める必要がある - あなたはundefined classのようなエラーを見るたびに、あなたは常に最初にヘッダファイルを欠落しているはずです

#include <sstream> 

を。

Hereは、stringstreamクラスのドキュメントです。

1

この含める:

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; 
} 

:ところで

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

、あなたのようにmain()自体にstd::cin >> testを使用することができます。これを書き、また

#include <sstream> 

をの必要はありません機能!

+1

または単に' return ss >> num? num; 0; '? (ss >> num; return ss?num:0; '。) –

+0

@JamesKanze:いいですね。 :-) – Nawaz

3

ストリングストリームを使用するには、実行する必要があります。

#include <sstream> 

その後、すべてが正常に動作するように見えます。

+0

smdh ...私は寝る必要があります。その種の注意の欠如は容認できない...ありがとう。 –

3

sstreamを含める必要があります。

#include <sstream>

2

は、私が追加する必要があります - あなたのプロジェクトがプリコンパイル済みヘッダーを使用している場合(例えば、Windowsストアアプリ用のWin32コンソールアプリケーションや"pch.h""stdafx.h"は) - 彼らは先に<sstream>に含まれていることを確認してください。

関連する問題