This是VS2010中函数basic_istream::tellg()
的定义。请注意,该函数返回类型为pos_type
的变量。但是,当我用streamoff
替换下面给出的示例中使用的类型pos_type
时,编译器会抱怨(C2065:'pos_type':未声明的标识符)。
pos_type
在<fstream>
中定义为typedef typename _Traits::pos_type pos_type;
。
// basic_istream_tellg.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
ifstream file;
char c;
streamoff i; // compiler complains if I replace streamoff by pos_type
file.open("basic_istream_tellg.txt");
i = file.tellg();
file >> c;
cout << c << " " << i << endl;
i = file.tellg();
file >> c;
cout << c << " " << i << endl;
}
答案 0 :(得分:4)
你不能没有资格就写pos_type
。请注意,它是ifstream
的成员。所以你要写这个:
ifstream::pos_type i; //ok
现在应该可以了。
此外,由于using namespace std;
is considered bad,您应该避免使用它,而应该更喜欢使用完全限定条件:
std::ifstream file; //fully-qualified
std::ifstream::pos_type i; //fully-qualified
在C ++ 11中,您可以使用auto
代替。
auto i = file.tellg();
让编译器将i
推导为std::ifstream::pos_type
。
希望有所帮助。
答案 1 :(得分:0)
pos_type
是一个成员typedef,它属于一个类,而不是一个名称空间范围的typedef。您需要ifstream::pos_type
。
答案 2 :(得分:0)
std::ifstream file;
std::ifstream::pos_type i;
你可以使用它:它适用于我的开发C ++
i = file.tellg();