我有两个类,Lexer和InputStream。在我的main函数中,我创建了一个Lexer实例,传入字符串'filename‘。我的意图是让Lexer将'filename‘传递给它的成员变量' is ',这样InputStream::getChar()就可以在Lexer::getString()调用它时读出字符。我不确定如何做到这一点,因为目前,filename可以很好地传递给Lexer,但不会传递到InputStream的构造函数中。如何将文件名放入InputStream的构造函数?
class InputStream
{
public:
InputStream(string filename)
{
in.open(filename);
}
char getChar()
{
return in.get();
}
char nextChar()
{
return in.peek();
}
private:
ifstream in;
};
class Lexer
{
public:
Lexer(string filename)
{
this->filename = filename;
}
string getString()
{
while (is.nextChar() != EOF)
{
valueSoFar.push_back(is.getChar());
}
}
private:
string valueSoFar;
string filename;
InputStream is{filename};
};
谢谢你的帮忙!
发布于 2018-09-30 07:25:00
您可以在Lexer类构造函数中初始化Inputstream实例,如下所示
class Lexer
{
public:
Lexer(string filename)
: is(filename)
{
this->filename = filename;
}
string getString()
{
valueSoFar.push_back(is.getChar());
}
private:
string valueSoFar;
string filename;
InputStream is;
};
https://stackoverflow.com/questions/52573244
复制相似问题