为什么我不能在下面的代码中使用`pos_type`返回类型?

时间:2013-01-30 19:01:32

标签: c++ visual-studio-2010 fstream

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;
}

3 个答案:

答案 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();