【发布时间】:2013-05-14 13:47:09
【问题描述】:
我做了一些研究,例如:
- Overloading operator<<: cannot bind lvalue to ‘std::basic_ostream&&’
- Overloading operator<<: cannot bind ‘std::basic_ostream’ lvalue to ‘std::basic_ostream&&’
- error: cannot bind ‘std::basic_ostream’ lvalue to ‘std::basic_ostream&&’
如果我误解了一些,请告诉我。
我试图从文件中输入 std::pair 并且我想使用 std::istream_iterator >
代码来了:
std::ifstream in("file.in");
std::map<int, int> pp;
pp.insert((std::istream_iterator<std::pair<int, int> >(in)),
std::istream_iterator<std::pair<int, int> >());
我做了如下重载:
std::istream & operator>>(std::istream & in, std::pair<int, int> & pa)
{ in >> pa.first >> pa.second; return in; }
std::istream & operator>>(std::istream && in, std::pair<int, int> & pa)
{ in >> pa.first >> pa.second; return in; }
这是错误:
In file included from /usr/include/c++/4.8/iterator:66:0,
from No_12.cpp:7:
/usr/include/c++/4.8/bits/stream_iterator.h: In instantiation of ‘void std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::_M_read() [with _Tp = std::pair<int, int>; _CharT = char; _Traits = std::char_traits<char>; _Dist = long int]’:
/usr/include/c++/4.8/bits/stream_iterator.h:70:17: required from ‘std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_iterator(std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_type&) [with _Tp = std::pair<int, int>; _CharT = char; _Traits = std::char_traits<char>; _Dist = long int; std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_type = std::basic_istream<char>]’
No_12.cpp:23:59: required from here
/usr/include/c++/4.8/bits/stream_iterator.h:121:17: error: cannot bind ‘std::istream_iterator<std::pair<int, int> >::istream_type {aka std::basic_istream<char>}’ lvalue to ‘std::basic_istream<char>&&’
*_M_stream >> _M_value;
^
In file included from /usr/include/c++/4.8/iostream:40:0,
from /files/Nutstore/000/CPPWorkSpace/SHUCourse/DataStructures/BinarySearchTree/20130514/src/BinarySearchTree.hpp:6,
from /files/Nutstore/000/CPPWorkSpace/SHUCourse/DataStructures/BinarySearchTree/20130514/BinarySearchTree:3,
from No_12.cpp:1:
/usr/include/c++/4.8/istream:872:5: error: initializing argument 1 of ‘std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = std::pair<int, int>]’
operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
我不知道我现在能做什么...... 希望有人能给我一些建议。 谢谢。
【问题讨论】:
-
另外,我用的是g++-4.8
-
在我看来,您的运营商找不到(名称解析)。我会尝试获取更多信息并发布答案。
-
为什么第二次重载?在我看来这是你的问题。通常的习惯用法是只提供第一个重载。
-
@JamesKanze 不能解决问题;事实上,将它们放在 clang 3.2 中的命名空间 std 中确实可以解决问题 - 虽然我不知道为什么。
-
如果涉及到从属名称就有意义了,我仍在试图弄清楚在哪里。
标签: c++