编译错误是:
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是正确的方法吗?还是有更好的解决方案?
答案 0 :(得分:3)
正如上面的评论所说,draw()
被声明为const的问题。
在const成员函数中,所有成员变量都被视为const。
从流中读取会改变流对象(它必须填充流缓冲区并更新流位置),因此您无法在const流上执行此操作。
使draw()
非const,或使screen_content_
变为可变。