Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ gcc标准::istream';错误:从类型‘;转换无效;标准:streamsize’;键入‘;标准:streamsize’';_C++_Gcc_Casting_Iostream - Fatal编程技术网

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返回对流的引用。因此发生的情况是:

  • 调用read,它返回一个istream&
  • 您尝试将该istream分配给std::streamsize
  • 由于编译器没有找到合适的方法来执行此操作,因此尝试将流的运算符void*的结果分配给std::streamsize
  • 由于无法分配这些类型,因此会产生错误

  • 如果您想知道读取了多少字节,请使用
    readsome()
    not
    read()

    AFAIK
    readsome
    仅读取缓冲区中已有的数据。通常您只需执行
    read
    +
    gcount