指向>>运算符的流问题的指针?

Pointer to an fstream issue with >> operator?

本文关键字:gt 指针 问题 运算符 指向      更新时间:2023-10-16

我正在尝试使用文件流来读取输入,并且当我在类之间传输文件时,我需要能够维护指向文件的指针。这是我要做的事情的粗略轮廓:

class A {
friend class B;
public:
    void somefunction();
private:
    fstream o;
    B b;
};
class B {
   fstream * in;
   public:
        void input();
        void modify(fstream *);
};

这是我试图使用的两个类的简单表示。我的功能可以像这样修改Fstream:

void A::somefunction() {
    B.modify(o);
}
void B::modify(fstream * o) {
     this -> in = o;
}

在这里,我通过了另一个Fstream,以便B类现在保留指向该文件的指针。但是,当我尝试使用它阅读输入时,我失败了:

void B::input() {
    while (*in >> object) {
        cout << object << endl;
    }
}

该语句简单地评估为false,while循环不会执行。我想知道这是否是流的问题,但我不确定。有人有任何建议吗?

编辑:

B b;
b.modify(o);

我想从A类中通过fstream o进入B类B。我将A类fstream * in设置为B类中的fstream o。"将"流到B类,以便可以从文件中读取。

首先,流是不可复制的(它们的复制构造函数在pre-c 11中是私有的,并在C 11和C 14中删除)。如果您有fstream类型的成员,则需要std::move(使用C 11或更高版本)。如果您不想使用(无法使用)C 11,则需要将指针(或引用)周围传递。这是用指针进行操作的一种方法:

#include <iostream>
#include <fstream>
class A
{
    std::fstream* o; // pointer to fstream, not fstream
public:
    A(std::fstream* o): o(o) {}
    std::fstream* get_fstream() const
    {
        return o;
    }
};
class B
{
    std::fstream* in;
public:
    void modify(std::fstream* o)
    {
        this -> in = o;
    }
    void input()
    {
        std::string object;
        while (*in >> object) {
            std::cout << object << std::endl;
        }
    }
};
int main()
{
    std::fstream* ifile = new std::fstream("test.txt");
    A a(ifile);
    B b;
    b.modify(a.get_fstream());
    b.input();
    delete ifile;
}

我更喜欢指针与引用,因为必须初始化参考文献,并且以后不能更改。