【发布时间】:2012-07-05 10:21:31
【问题描述】:
我是第一次尝试使用 seekg。 它在文档中说它的论点可能是:
istream& seekg (streampos pos);
istream& seekg (streamoff off, ios_base::seekdir dir);
据我了解,'streampos pos' 可能是一个 int?我看到了像“seekg(0)”这样的例子 但是,当尝试编译它时,它说我使用了无效的参数:
void function(int pos){
ifstream reader("data.dat");
if(!reader.is_open())
return 0;
int posinArchive = pos * 74;
reader.seekg(posinArchive);
我什至尝试将其直接转换为 streampos:
void function(int pos){
ifstream reader("data.dat");
if(!reader.is_open())
return 0;
int posinArchive = pos * 74;
reader.seekg((streampos)posinArchive);
同样的事情。 seekg(0),什么也没有。 怎么了?
【问题讨论】:
-
发布您遇到的错误的文本?
-
无效参数的候选者是:std::basic_istream
> & seekg(?) std::basic_istream > & seekg(long long int, enum std::_los_Seekdir) -
从错误中,听起来编译器几乎没有为您上面列出的方法的第一个变体找到声明/重载(来自文档)。我知道这可能是一个奇怪的问题,但是您的代码是否有可能无法访问
streampos的定义?或者,看看你是否对其他变体有更多的运气会很有趣...... -
如果我输入 seekg (0, ios::end);它确实有效。此外,当我尝试投射时,streampos 会变成绿色,所以我认为它知道它是什么。
-
好的,那么听起来您有一个解决方法。要弄清楚到底发生了什么,您可以考虑通过预处理器运行源文件,以确认
seekg声明已从您包含的头文件中正确提取...