A S*_*ity 4 c++ windows void-pointers visual-c++
Error 1 error C2036: 'const void *' : unknown size file.cpp 111
Run Code Online (Sandbox Code Playgroud)
我不跟随.GCC从不抱怨void*指针算法,即使是-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
...
Run Code Online (Sandbox Code Playgroud)
Car*_*rum 11
你不能在指针上做指针数学运算void *.演员oData->bufpos和oData->anotherConstVoidPtr编译器知道如何处理的东西.因为你似乎在寻找大小,大概是以字节为单位,所以char *应该使用:
if (((char *)oData->bufpos + someSize_t) ...
Run Code Online (Sandbox Code Playgroud)
在线上:
if ( oData->bufpos ...
Run Code Online (Sandbox Code Playgroud)
bufpos 的类型仍然是 void*。编译器不知道该指针指向什么,因此它会给出该错误。
对于指针算术, void* 没有大小,因此获取偏移量或进行其他指针算术没有意义。如果您想将其偏移多个字节,请将其转换为 char*:
if(((char*)oData->bufpos) + offset ...
Run Code Online (Sandbox Code Playgroud)
给出更多代码/上下文后进行编辑
如果可以的话,尝试使用 char* 而不是 void*。C 地区的人们会知道你在说什么,因为字符是字节,你会省去转换的麻烦。
| 归档时间: |
|
| 查看次数: |
4195 次 |
| 最近记录: |