C++ 将std::streampos的老式演员阵容改编为g++;4.4兼容
下午好 我正在尝试使用一些老式的代码在g++4.4中运行。我的理解是,在g++4.0中编译的代码很好,但在4.0和4.4之间,g++变得更加严格。此代码尤其会导致编译器停止并抱怨:C++ 将std::streampos的老式演员阵容改编为g++;4.4兼容,c++,casting,g++,stream,C++,Casting,G++,Stream,下午好 我正在尝试使用一些老式的代码在g++4.4中运行。我的理解是,在g++4.0中编译的代码很好,但在4.0和4.4之间,g++变得更加严格。此代码尤其会导致编译器停止并抱怨: sprintf(s,"%.7d",(long)tellp()); tellp()是一个std::streampos对象。上面对sprintf的调用发生在std::fstream类的派生类中 该代码旨在将指示fstream对象中位置的数据转换为数字类型,以便将其传递给第二个运行程序(通过文件),以便第二个程序可以快速
sprintf(s,"%.7d",(long)tellp());
tellp()是一个std::streampos对象。上面对sprintf的调用发生在std::fstream类的派生类中
该代码旨在将指示fstream对象中位置的数据转换为数字类型,以便将其传递给第二个运行程序(通过文件),以便第二个程序可以快速查找文件中的某些数据
有没有一个简单的方法来拯救这一点,用一个g++会很高兴的演员
错误消息:
error: format ‘%.7d’ expects type ‘int’, but argument 3 has type ‘std::streamoff’
因为std::fpos基本上是实现定义的,所以似乎没有一种可移植的方法来实现这一点。也就是说,gcc不像对待数字那样对待std::streampos。另一方面,您可以将其转换为std::streamoff,这取决于其实际类型的体系结构,但是某种类型的typedef to
long
或long
或其他类型。从流的第一个位置减去所需的偏移量,它将返回可轻松转换为long的std::streamoff
。问题不在于%d需要int,而您正在转换为long
这应该是“%.7ld”吗