我曾在一个类中使用过以下代码段。今天,我把它复制到另一个班级。编译时,我得到以下错误。奇怪的是,这样的事实际上已经发生了!你能告诉我这是怎么回事吗?谢谢。
我刚刚使用以下代码段代码在演示项目中进行测试。我跑得像个魅力!
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> ]
答案 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);
}