2016-12-30 74 views
1

我试图做如何复制CIN

auto cin2 = cin; 
int a; 
cin2 >> a; 

但是编译器只给了我不可理解的错误:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’: 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:47: error: within this context 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd: In copy constructor ‘std::basic_istream<char, std::char_traits<char> >::basic_istream(const std::basic_istream<char, std::char_traits<char> >&)’: 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:53: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here 
test.cpp: In function ‘int main()’: 
test.cpp:6: note: synthesized method ‘std::basic_istream<char, std::char_traits<char> >::basic_istream(const std::basic_istream<char, std::char_traits<char> >&)’ first required here 

什么是做这种正确的方法是什么?

+7

挂上一秒......你为什么要“复制”std :: cin? – WhiZTiM

+1

“做这件事的正确方法是什么?”不这样做。 – YSC

+0

“但编译器只给了我不可理解的错误”:它基本上是说''ios_base'拷贝构造函数是私有的,你不能复制它。 – Amadeus

回答

2

标准分类std::istream不可复制。你可以声明一个参考std::cin例如通过以下方式

decltype(auto) cin2 = (std::cin); 
int a; 
cin2 >> a; 

或者你可以写

auto &cin2 = std::cin; 

要实现你可以用引用或指针到流的istream的迭代器。

+0

不会'auto&cin2 = cin;'更具可读性且不易出错? – Rakete1111

+0

@ Rakete1111像往常一样,有几种方法可以完成一项任务:) –

+0

由于分类方式的奇怪类型推断,在使用'decltype(auto)'时分配时很容易忘记parens,这就是为什么我想知道为什么你使用方式:)但哦哦 – Rakete1111