为什么我的istream_iterator不起作用

Why does my istream_iterator not work?

本文关键字:iterator 不起作用 istream 我的 为什么      更新时间:2023-10-16

这是我写的代码。我正在使用Visual Studio并学习如何使用标准模板库。当我尝试从源打印时,ostream_iterator也不起作用。它给出了一个巨大的错误列表,那些我不可能理解的错误。

这是我尝试在Visual Studio中运行的完整代码。软件设置有问题吗?

#include <iostream>
#include <vector>
#include <list>
#include <iterator>
#include <functional>
using namespace std;
//stream_iterator
int main() {
    vector<string> source = { "31", "3113" };
    copy(istream_iterator<string>(cin), istream_iterator<string>(),back_inserter(source));  //can't understand why this won't work
    return 0;
}


These below are the error messages.
    1>------ Build started: Project: StreamIters, Configuration: Debug Win32 ------
    1>  Source.cpp
    1>c:program files (x86)microsoft visual studio 12.0vcincludeiterator(256): error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(485): could be 'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_streambuf<char,std::char_traits<char>> *)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(466): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(void *&)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(448): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(long double &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(430): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(double &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(411): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(float &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(392): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned __int64 &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(373): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(__int64 &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(353): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned long &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(335): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(long &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(317): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned int &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(291): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(int &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(272): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(unsigned short &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(237): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(short &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(218): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::_Bool &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(211): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::ios_base &(__cdecl *)(std::ios_base &))'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(204): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_ios<char,std::char_traits<char>> &(__cdecl *)(std::basic_ios<char,std::char_traits<char>> &))'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(198): or       'std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_istream<char,std::char_traits<char>> &(__cdecl *)(std::basic_istream<char,std::char_traits<char>> &))'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(1103): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><char,std::char_traits<char>,_Ty>(std::basic_istream<char,std::char_traits<char>> &&,_Ty &)'
    1>          with
    1>          [
    1>              _Ty=std::string
    1>          ]
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(1093): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,unsigned char &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(1086): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,unsigned char *)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(1079): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,signed char &)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeistream(1072): or       'std::basic_istream<char,std::char_traits<char>> &std::operator >><std::char_traits<char>>(std::basic_istream<char,std::char_traits<char>> &,signed char *)'
    1>          while trying to match the argument list '(std::basic_istream<char,std::char_traits<char>>, std::string)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeiterator(255) : while compiling class template member function 'void std::istream_iterator<std::string,char,std::char_traits<char>,ptrdiff_t>::_Getval(void)'
    1>          c:program files (x86)microsoft visual studio 12.0vcincludeiterator(222) : see reference to function template instantiation 'void std::istream_iterator<std::string,char,std::char_traits<char>,ptrdiff_t>::_Getval(void)' being compiled
    1>          c:usersmahedocumentsvisual studio 2013projectsstreamitersstreamiterssource.cpp(19) : see reference to class template instantiation 'std::istream_iterator<std::string,char,std::char_traits<char>,ptrdiff_t>' being compiled
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

代码缺少标头<string> 。虽然使用的接口确实要求至少有一个可用的std::string声明,但并不要求你包含的标头提供std::string和/或对其操作的函数的定义。我没有安装 MSVC++,但似乎您包含的标头提供了std::string的定义,但没有输入或输出运算符的声明。

根据经验,您永远不应该依赖间接包容。相反,您应该始终显式包含所有相关标头:尽管声明当前可能可用,但标头可能会更改为不包含其他标头。