我的头文件中有以下代码:
class Factovisors {
public:
Factovisors(std::istream& strm):strm_(strm)
{
}
void run()
{
unsigned int n,m;
while (!strm_.eof()) {
strm_ >> n >> m;
if (isFact(n,m))
std::cout << m << " divides " << n << "!\n";
}
}
std::istream strm_;
};
我的 .cpp 文件包含以下代码。
std::ifstream strm("factovisor.test");
Factovisors facto(strm);
facto.run();
strm.close();
我的编译器给我的错误是:
std::ios::basic_ios(const std::ios &) is not accessible from
std::istream::basic_istream(const std::istream &)
我想我错过了一些非常明显的东西。因此,我们将不胜感激任何帮助。
最佳答案
问题是 istream
是一个“接口(interface)”。它具有纯虚函数,因此拥有它的拷贝没有意义。您可能会做的是保留对传递的流的引用:
std::istream& strm_;
strm_
可以是 ifstream
或 istringstream
或从 istream
派生的任何输入流。
关于c++ - 将 istream 参数传递给类构造函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655912/