Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将std::streampos的老式演员阵容改编为g++;4.4兼容_C++_Casting_G++_Stream - Fatal编程技术网

C++ 将std::streampos的老式演员阵容改编为g++;4.4兼容

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对象中位置的数据转换为数字类型,以便将其传递给第二个运行程序(通过文件),以便第二个程序可以快速

下午好

我正在尝试使用一些老式的代码在g++4.4中运行。我的理解是,在g++4.0中编译的代码很好,但在4.0和4.4之间,g++变得更加严格。此代码尤其会导致编译器停止并抱怨:

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”吗