C++ C2679编译器从std::istream构造常量int成员变量时出错
为什么我不能像下面的代码那样从istream构造一个整数成员变量?有办法吗C++ C2679编译器从std::istream构造常量int成员变量时出错,c++,iostream,C++,Iostream,为什么我不能像下面的代码那样从istream构造一个整数成员变量?有办法吗 #include <iostream> // std::cout #include <fstream> // std::ifstream class a { public: a(std::istream& strm) : N(strm >> N) {} // error on this line*** void get_number(std
#include <iostream> // std::cout
#include <fstream> // std::ifstream
class a {
public:
a(std::istream& strm) : N(strm >> N) {} // error on this line***
void get_number(std::istream& strm) {
int a;
strm >> a;
std::cout << "you retrieved: " << a << " from stream\n";
}
private:
const int N;
};
int main() {
std::ifstream ifs ("test.txt", std::ifstream::in);
a(ifs);
// this works
int n;
ifs >> n;
std::cout << n;
return 0;
}
#包括//std::cout
#include//std::ifstream
甲级{
公众:
a(std::istream&strm):N(strm>>N){}//此行出错***
无效获取编号(std::istream和strm){
INTA;
strm>>a;
std::cout编译。。。
1> main.cpp
1> c:\cpp\stream\u test\stream\u test\main.cpp(7):错误C2679:二进制“>>”:未找到接受“const int”类型的右操作数的运算符(或没有可接受的转换)
1> c:\program files(x86)\microsoft visual studio 9.0\vc\include\istream(1144):可以是“std::basic\u istream&std::operator>>(std::basic\u istream&,signed char*)”[使用参数相关查找找到]
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\program files(x86)\microsoft visual studio 9.0\vc\include\istream(1146):或“std::basic\u istream&std::operator>>(std::basic\u istream&,signed char&)”[使用参数相关查找找到]
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\program files(x86)\microsoft visual studio 9.0\vc\include\istream(1148):或“std::basic\u istream&std::operator>>(std::basic\u istream&,unsigned char*)”[使用参数相关查找找到]
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\program files(x86)\microsoft visual studio 9.0\vc\include\istream(1150):或“std::basic\u istream&std::operator>>(std::basic\u istream&,无符号字符&)”[使用参数相关查找找到]
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(155):或“std::basic\u istream&std::basic\u istream::operator>>(std::basic\u istream&(uu cdecl*)(std::basic\u istream&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(161):或“std::basic\u istream&std::basic\u istream::operator>>(std::basic\u ios&(uuu cdecl*)(std::basic\u ios&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(168):或“std::basic\u istream&std::basic\u istream::operator>>(std::ios\u base&(uU cdecl*)(std::ios\u base&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(175):或“std::basic\u istream&std::basic\u istream::operator>>(std::\u Bool&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(194):或“std::basic\u istream&std::basic\u istream::operator>>(简称&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\program files(x86)\microsoft visual studio 9.0\vc\include\istream(228):或“std::basic\u istream&std::basic\u istream::operator>>(未签名短&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(247):或'std::basic\u istream&std::basic\u istream::operator>>(int&)'
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(273):或“std::basic\u istream&std::basic\u istream::operator>>(未签名的int&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(291):或“std::basic\u istream&std::basic\u istream::operator>>(long&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(309):或“std::basic\u istream&std::basic\u istream::operator>>(\uuuuw64无符号长-)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(329):或'std::basic\u istream&std::basic\u istream::operator>>(\uu int64&)'
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(348):或“std::basic\u istream&std::basic\u istream::operator>>(未签名的\uu int64&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(367):或“std::basic\u istream&std::basic\u istream::operator>>(float&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(386):或“std::basic\u istream&std::basic\u istream::operator>>(双精度&)”
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 9.0\vc\include\istream(404):或'std::basic\u istream&std::basic\u istream::operator>>(长双精度&)'
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1>
1>------ Build started: Project: stream_test, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>c:\cpp\stream_test\stream_test\main.cpp(7) : error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const int' (or there is no acceptable conversion)
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(1144): could be 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(1146): or 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char &)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(1148): or 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(1150): or 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char &)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(155): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_istream<_Elem,_Traits> &(__cdecl *)(std::basic_istream<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(161): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(168): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::ios_base &(__cdecl *)(std::ios_base &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(175): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::_Bool &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(194): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(short &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(228): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned short &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(247): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(int &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(273): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned int &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(291): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(309): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(__w64 unsigned long &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(329): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(__int64 &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(348): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned __int64 &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(367): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(float &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(386): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(double &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(404): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long double &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(422): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(void *&)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(441): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_streambuf<_Elem,_Traits> *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> while trying to match the argument list '(std::istream, const int)'
1>c:\cpp\stream_test\stream_test\main.cpp(7) : fatal error C1903: unable to recover from previous error(s); stopping compilation
1>Build log was saved at "file://c:\cpp\stream_test\stream_test\Debug\BuildLog.htm"
1>stream_test - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
strm >> N
const int N;
N( strm >> N )
N( ( strm >> N, N ) )
int get_from(std::istream& is)
{
int i;
if (is >> i) {
return i;
} else {
// error, you might wanna throw here
}
}
a(std::istream& strm) : N(get_from(strm)) {}