将getline与ifstream类成员一起使用

时间:2015-06-01 22:53:54

标签: c++

编译错误是:

no matching function for call to 'getline(const ifstream&, std::string&)'

StartScreen.h

#include <fstream>
#include <string>
#include "Screen.h"

class StartScreen: public Screen {
public:
    StartScreen();
    virtual ~StartScreen();
    void advise() const;
    void draw() const;
private:
    StartScreen(const StartScreen&) = delete;
    StartScreen& operator=(const StartScreen&) = delete;
    std::ifstream screen_content_;
};

StartScreen.cpp

#include "StartScreen.h"

StartScreen::StartScreen() {
    screen_content_.open("start-screen.txt");
}

StartScreen::~StartScreen() {
    screen_content_.close();
}

void StartScreen::advise() const {
}

void StartScreen::draw() const {
    std::string line;
    if (screen_content_.is_open()) {
        while (screen_content_.eof()) {
            std::getline(screen_content_, line);
        }
    }
}

我的想法是在标准输出中打印文本文件中的所有行。使用fstream是正确的方法吗?还是有更好的解决方案?

1 个答案:

答案 0 :(得分:3)

正如上面的评论所说,draw()被声明为const的问题。

在const成员函数中,所有成员变量都被视为const。

从流中读取会改变流对象(它必须填充流缓冲区并更新流位置),因此您无法在const流上执行此操作。

使draw()非const,或使screen_content_变为可变。