2012-03-22 41 views
11

stringstream denemek ve yazmak için yazdığım bu küçük kod parçasının neden olarak tanımlandığını ve dizeleri olarak girilen olası sayıları tanımlayabilmek için stringstream'un nasıl çalıştığını anlamaya çalışıyorum.stringstream hataları 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; 
} 

hatalar ... birkaç hatalarla can sıkıcı: yanlış yapıyorum

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

Hata iletilerinin ardında yatan neden yok, ancak yanlış yaptığınız bir şey 'stringstream',' istringstream' kullanıldığında. ('Fail' kullanımı da çok deyimsiz değil.) –

cevap

22

Aşağıdaki dosyasının eklenmesinin gerek - Eğer undefined class gibi hataları gördüğünüzde

#include <sstream> 

, her zaman ilk başlık dosyaları eksik aramalısınız.

Here, stringstream sınıfının belgeleridir.

1

bu ekleyin: Ayrıca

#include <sstream> 

, bunu yazmak:

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

: Bu arada

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

, siz main() kendini std::cin >> test kullanabilirsiniz'e gerek yokişlevi!

+1

Veya sadece 'ss iade >> num? num: 0; '? (Muhtemelen '>>' i ayrı bir ifadeye ayırmam gerekir. 'Ss >> num; ss ss num: 0;'.) –

+0

@JamesKanze: Güzel. :-) – Nawaz

3

Dize akışını kullanmak için yapmanız gereken;

#include <sstream> 

Bundan sonra, her şey gerektiği gibi çalışıyor gibi görünüyor.

+0

smdh ... Yatağa lol gitmeliyim. Bu tür dikkat eksikliği kabul edilemez ... teşekkürler. –

3

Sstream eklemeniz gerekir.

#include <sstream>

2

ben eklemek gerekir - Projeniz derlenmiş başlık kullanıyorsa (örneğin, Windows Store uygulamasının Win32 konsol uygulaması veya "pch.h" için "stdafx.h") - onlar önde <sstream> ait dahil edildiğinden emin olmak edin .

İlgili konular