开发者

stringstream conversion error

开发者 https://www.devze.com 2023-03-18 03:44 出处:网络
I had ever used the following code snippet in one class. Today, I copied it to another class. When compiling, I got the following errors. It is strange that such a thing has actually happened! Would y

I had ever used the following code snippet in one class. Today, I copied it to another class. When compiling, I got the following errors. It is strange that such a thing has actually happened! Would you please tell what's the matter? Thank you.

I've just been using the following snippet code to do a test in a demo project. I ran like a charm!

int main()
{  
   char buffer[] = "I1 I2 V1 V2 I3 V3 I4 DO V4";

   std::stringstream s(buffer); 
   std::istream_iterator<std::string> begin(s); 
   std::istream_iterator<std::string> end; 
   std::vector<std::string> IVector;
   std::vector<std::string> VVector;

   for ( ; begin != end; ++begin) 
   {     
       std::string sElem = *begin;

       switch((*begin)[0])
       {  
          case 'I':
            IVector.push_back( sElem);
            break;
          case 'V':
            VVector.push_back( sElem);
            break;
          default:
           ;
       }
   }

   return 0;
}

void ClassifyChannel(char* szBuffer)
{   
    // Empty vectors
    m_svIRChannels.clear();
    m_svVISChannels.clear();

    std::stringstream s(szBuffer); 
    std::istream_iterator<std::string> itBegin(s); 
    std::istream_iterator<std::string> itEnd; 

    for (; itBegin != itEnd; ++itBegin) 
    {     
        std::string sElem = *itBegin;

        // Switch on first character
        switch ((*itBegin)[0])
        {  
           // Infrared channel, such as IR1, IR2, IR3 (WV), and IR4
           case 'I':
           case 'W':
              // Insert into IR channel vector here 
              m_svIRChannels.push_back(sElem);
              break;
           // Visible channels, such as VIS, and VIS1KM
           case 'V':
              // Insert into VIS channel vector here 
              m_svVISChannels.push_back(sElem);
              break;
        }
    } 
} 

The error message is

error C2440: 'initializing' : cannot convert from 'std::string' to 'int'
1> 开发者_运维百科       No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>f:\tips\tips\fy2hdf5dataiohandler.cpp(830) : error C2664: 'std::istream_iterator<_Ty>::istream_iterator(std::basic_istream<_Elem,_Traits> &)' : cannot convert parameter 1 from 'int' to 'std::basic_istream<_Elem,_Traits> &'
1>        with
1>        [
1>            _Ty=std::string,
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        and
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]    


What compiler are you using? Your code snippet compiles fine with VC10 on my box. Did you forget to include all the proper header files? For this piece of code you need these 3 headers:

#include <string>
#include <sstream>
#include <iterator>

Since VC10, <iterator> is not implicitly included by others. You need to include it yourself.


My guess; you didn't explicitely do an

#include <string>

The IO stream headers just have a forward-declaration of std::string, but this is not sufficient in your case. Try explicitely including the string header to resolve this.


#include <sstream> 

is required to include.

I tried in VS2017 and VS2019 and it is working by including this header.

Following is the sample code I tried.

int main()
{
    string line = "asasas asasas asasas asasas must try";
    stringstream check1(line);
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号