好吧,所以这里真的很奇怪。我正在将原始数据读入缓冲区,没什么特别的,我的代码是这样的:
typedef unsigned char Byte;
/* ... */
static Byte SerializeBuffer[2048];
/* ... */
std::streamsize readInBuffer =
data.read((char*)SerializeBuffer, sizeof(SerializeBuffer));
但是我会继续收到编译错误消息'error: invalid cast from type ‘void *’ to type ‘std::streamsize’'
,不知道为什么编译器认为sizeof是一个void指针。好吧,我试过用几种方法来铸造它,但同样的错误不断发生。我最终得到了这个:
std::streamsize dummy = sizeof(SerializeBuffer);
std::streamsize readInBuffer =
data.read((char*)SerializeBuffer, reinterpret_cast<std::streamsize>(dummy));
弹出以下内容:error: invalid cast from type ‘std::streamsize’ to type ‘std::streamsize’
我完全失败了。还有其他想法吗?
编译器:gcc 4.4.5
操作系统:Linux 2.6.35
修改 Visual Studio 2010上的相同内容
答案 0 :(得分:3)
如果data
是istream
,请记住,成员read
会返回对data
(流本身)的引用,而不是读取的字符数。
void *
的原因可能是因为编译器将它分配给std::streamsize
成员,尝试使用隐式转换为void *
(当你执行if(data) ...
时使用的转换{1}}),但仍然void *
与std::streamsize
不匹配。
顺便说一句,在使用gcount
方法调用read
之后,可以获取有关读取的字符数的信息。
答案 1 :(得分:1)
您应该查看documentation。 Read返回对流的引用。所以发生的事情是:
答案 2 :(得分:0)
必须是std::streamsize readInBuffer = data.read(...
部分。 read
不返回大小,而是返回流本身。
答案 3 :(得分:-1)
如果您想知道读取了多少字节,请使用readsome()
而不是read()