Error 1 error C2036: 'const void *' : unknown size file.cpp 111
我不跟随。 GCC从不抱怨void *指针算术,甚至在-ansi -pedantic -Wall
上-ansi -pedantic -Wall
。 有什么问题?
这里是代码 –
struct MyStruct { const void *buf; // Pointer to buffer const void *bufpos; // Pointer to current position in buffer }; ... size_t someSize_t, anotherSize_t; MyStruct *myStruct = (MyStruct *) userdata; ... if ( (myStruct->bufpos + someSize_t) > (myStruct->buf + anotherSize_t) ) { // Error on this line ...
你不能在void *
指针上做指针数学。 将oData->bufpos
和oData->anotherConstVoidPtr
转换为编译器知道如何处理的内容。 因为你似乎正在寻找大小,这大概是以字节为单位,铸造到char *
应该工作:
if (((char *)oData->bufpos + someSize_t) ...
在线上:
if ( oData->bufpos ...
bufpos的类型仍然是void *。 编译器不知道那个指针指向什么,所以它给了你那个错误。
对于指针运算,void *没有大小,所以取一个偏移量或者做其他指针运算是没有意义的。 将它转换为char *,如果你想通过多个字节来抵消它:
if(((char*)oData->bufpos) + offset ...
更多的代码/上下文后,编辑
如果你能帮助它,请尝试使用char *而不是void *。 在C-land的人会知道你在说什么,因为字符是字节,你可以节省自己头疼的铸造。
$ 3.9.1 / 9-这个void类型有一个空的一组值。 void类型是不能完成的不完整类型。 它被用作不返回值的函数的返回类型。 任何表达式都可以显式转换为cv void(5.4)。 void类型的表达式只能用作表达式语句(6.2),作为逗号表达式(5.18)的操作数,作为?:(5.16)的第二个或第三个操作数,作为typeid的操作数,或者作为表达式在返回语句(6.6.3)中返回类型为void的函数。
我怀疑是不正确地使用了“标准”所允许的“空白”。