c++ - 将 istream 参数传递给类构造函数时出现问题

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

};

我的 .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_ 可以是 ifstreamistringstream 或从 istream 派生的任何输入流。

关于c++ - 将 istream 参数传递给类构造函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655912/

相关文章:

在重载算术运算符中调用 C++ 析构函数

C++指针管理与局部变量

c# - C++ 到 C# 代码转换,引用与值类型的麻烦

C++/结构范围

c++ - C++ 中的继承和更改变量

简化命名类型的 C++ 语言功能(特别是在函数声明中)

c++ - int 到自定义结构 c++ 的转换

c++ - 在 mac 上用 system( ) 打开 excel 文件?

c++ - 查找表是哈希表的一种形式吗?

c++ - boost 函数映射到字符串