stringstream转换错误

时间:2011-07-06 10:34:06

标签: c++ stringstream

我曾在一个类中使用过以下代码段。今天,我把它复制到另一个班级。编译时,我得到以下错误。奇怪的是,这样的事实际上已经发生了!你能告诉我这是怎么回事吗?谢谢。

我刚刚使用以下代码段代码在演示项目中进行测试。我跑得像个魅力!

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

错误消息是

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>        ]    

3 个答案:

答案 0 :(得分:2)

您使用的是什么编译器?你的代码片段在我的盒子上用VC10很好地编译。您是否忘记包含所有正确的头文件?对于这段代码,您需要这3个标题:

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

自VC10以来,其他人并未隐含地包含<iterator>。你需要自己包括它。

答案 1 :(得分:0)

我的猜测;你没有明确地做一个

#include <string>

IO流标头只有std::string的前向声明,但在您的情况下这还不够。请明确尝试使用string标头来解决此问题。

答案 2 :(得分:0)

#include <sstream> 
必须包含

我在VS2017和VS2019中尝试过,并且通过包含此标头可以正常工作。

以下是我尝试的示例代码。

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