Error 1 error C2036: 'const void *' : unknown size file.cpp 111
我不跟随。即使在-ansi -pedantic -Wall
上,GCC也从不抱怨void *指针算法。有什么问题?
这是代码 -
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
...
答案 0 :(得分:12)
您无法在void *
指针上进行指针数学运算。将oData->bufpos
和oData->anotherConstVoidPtr
转换为编译器知道如何处理的内容。由于您似乎在寻找可能以字节为单位的大小,因此转换为char *
应该有效:
if (((char *)oData->bufpos + someSize_t) ...
答案 1 :(得分:4)
在线:
if ( oData->bufpos ...
bufpos的类型仍然无效*。编译器不知道指针指向的是什么,因此它会给你错误。
对于指针运算,void *没有大小,因此采用偏移量或执行其他指针运算没有意义。如果要将其偏移多个字节,则将其强制转换为char *:
if(((char*)oData->bufpos) + offset ...
在提供更多代码/背景后编辑
如果你能提供帮助,请尝试使用char *而不是void *。 C-land中的人会知道你在说什么,因为字符是字节,你可以省去自己的铸造头痛。
答案 2 :(得分:1)
$ 3.9.1 / 9- void类型具有一组空值。 void类型是不完整的类型,无法完成。它用作不返回值的函数的返回类型。任何表达式都可以显式转换为cv void(5.4)类型。 void类型的表达式只能用作表达式语句(6.2),作为逗号表达式(5.18)的操作数,作为?:( 5.16)的第二个或第三个操作数,作为typeid的操作数,或作为表达式返回语句(6.6.3)中返回类型为void的函数。
我怀疑在标准允许的范围内使用'void'是不正确的。