将 istream 参数传递给类构造函数的问题

Pra*_*yot 1 c++

我的头文件中有以下代码:

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_;

};
Run Code Online (Sandbox Code Playgroud)

我的 .cpp 文件具有以下代码。

 std::ifstream strm("factovisor.test");

    Factovisors   facto(strm);

    facto.run();

    strm.close();
Run Code Online (Sandbox Code Playgroud)

我的编译器给我的错误是:

std::ios::basic_ios(const std::ios &) is not accessible from
std::istream::basic_istream(const std::istream &)
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些非常明显的东西。所以任何帮助将不胜感激。

Ara*_*raK 5

问题是这istream是一个“接口”。它具有纯虚函数,因此拥有它的副本是没有意义的。您可能要做的是保留对传递的流的引用:

std::istream& strm_;
Run Code Online (Sandbox Code Playgroud)

strm_可以是ifstreamistringstream或从 派生的任何输入流istream