1

basic_istream::tellg()是VS2010中函数的定义。请注意,该函数返回一个类型为 的变量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;
}
4

3 回答 3

4

你不能只写pos_type没有资格。请注意,它是 的成员ifstream。所以你必须这样写:

ifstream::pos_type i; //ok

现在应该可以了。

此外,由于using namespace std; 被认为是 bad,您应该避免它,而是应该更喜欢使用完整的限定:

std::ifstream file;        //fully-qualified
std::ifstream::pos_type i; //fully-qualified

在 C++11 中,您可以auto改用。

auto i = file.tellg();

并让编译器推断istd::ifstream::pos_type.

希望有帮助。

于 2013-01-30T19:07:16.520 回答
0

pos_type是属于类的成员 typedef,而不是命名空间范围的 typedef。你需要类似的东西ifstream::pos_type

于 2013-01-30T19:06:01.440 回答
0
std::ifstream file;        
std::ifstream::pos_type i; 

你可以使用这个:它在开发 C++ 中对我有用

 i = file.tellg();
于 2016-05-26T15:12:38.097 回答