C++ gcc标准::istream';错误:从类型‘;转换无效;标准:streamsize’;键入‘;标准:streamsize’';
好的,这里有一个很奇怪的。我正在将原始数据读入缓冲区,没什么特别的,我的代码是这样的:C++ gcc标准::istream';错误:从类型‘;转换无效;标准:streamsize’;键入‘;标准:streamsize’';,c++,gcc,casting,iostream,C++,Gcc,Casting,Iostream,好的,这里有一个很奇怪的。我正在将原始数据读入缓冲区,没什么特别的,我的代码是这样的: typedef unsigned char Byte; /* ... */ static Byte SerializeBuffer[2048]; /* ... */ std::streamsize readInBuffer = data.read((char*)SerializeBuffer, sizeof(SerializeBuffer)); 但我会一直收到编译错误消息“
typedef unsigned char Byte;
/* ... */
static Byte SerializeBuffer[2048];
/* ... */
std::streamsize readInBuffer =
data.read((char*)SerializeBuffer, sizeof(SerializeBuffer));
但我会一直收到编译错误消息“error:invalid cast从类型“void*”转换为类型“std::streamsize”
,不知道为什么编译器认为sizeof是一个void指针。嗯,我试着用几种方法铸造它,但同样的错误不断发生。我的结局是:
std::streamsize dummy = sizeof(SerializeBuffer);
std::streamsize readInBuffer =
data.read((char*)SerializeBuffer, reinterpret_cast<std::streamsize>(dummy));
std::streamsize dummy=sizeof(序列化缓冲区);
std::streamsize readInBuffer=
data.read((char*)序列化缓冲区,reinterpret_cast(dummy));
将弹出以下内容:错误:从类型“std::streamsize”转换为类型“std::streamsize”无效。
我完全不知所措。还有其他想法吗
编译器:gcc 4.4.5操作系统:Linux 2.6.35 编辑:
在Visual Studio 2010上也是一样的如果
数据
是istream
,请记住成员读取
返回对数据
的引用(流本身),而不是读取的字符数
void*
可能是因为编译器要将其分配给std::streamsize
成员,试图使用到void*
的隐式转换(在执行if(data)…
时使用的转换),但是void*
仍然与std::streamsize
不匹配
顺便说一下,在调用
read
后,可以使用方法获取有关读取字符数的信息。它必须是std::streamsize readInBuffer=data.read(…
part.read
不返回大小,但返回流本身。您应该检查。read返回对流的引用。因此发生的情况是:
如果您想知道读取了多少字节,请使用
readsome()
notread()
AFAIKreadsome
仅读取缓冲区中已有的数据。通常您只需执行read
+gcount
。