ISO C&x2B+;禁止递增类型为‘;无效*’,在转换为c++; 我知道它的老问题,但是什么是解决C应用程序(遗留)的旧逻辑,现在转换为C++?p>

ISO C&x2B+;禁止递增类型为‘;无效*’,在转换为c++; 我知道它的老问题,但是什么是解决C应用程序(遗留)的旧逻辑,现在转换为C++?p>,c,g++,void-pointers,C,G++,Void Pointers,在其工作中: void *p; void *response = malloc(60 * 81); p = response ; p+=4; G++给出:ISO C++禁止递增类型“空洞*”的指针 更新: 如果我将其更改为char*im,则会出现以下错误: char *p; char *response = malloc(60 * 81); error: invalid conversion from ‘void*’ to ‘char*’ char*是否也可以保存其他类型(基本类型),如

在其工作中:

void *p;
void *response = malloc(60 * 81);

p = response ;
p+=4;
G++给出:ISO C++禁止递增类型“空洞*”的指针 更新:
如果我将其更改为char*im,则会出现以下错误:

char *p;
char *response = malloc(60 * 81);

error: invalid conversion from ‘void*’ to ‘char*’
char*是否也可以保存其他类型(基本类型),如short、int、bool? 这就是为什么在这个遗留代码中使用它来保存差异类型,

,因为“指针的算术”。。。 如果你写
p+=4
,它的意思是:
p+=((sizeof(void*)*4)
,因为“指针的算术”。。。
如果你写
p+=4
它的意思是:
p+=((sizeof(void*)*4)

最简单的方法是将
void*
转换为
char*
。由于ISO C也禁止
void*
算术,gcc将其视为
char*
的扩展。有关更多详细信息,请参见此:

最简单的方法是将
void*
转换为
char*
。因为ISO C也禁止
void*
算术,gcc将其视为
char*
的扩展。有关更多详细信息,请参见此:

最简单的方法可能是查找编译器选项以更改此行为


最好的方法可能是将类型更改为
char*
,因为这似乎符合用法和意图。

最简单的方法可能是寻找编译器选项来更改此行为


最好的方法可能是将类型更改为char*,因为这似乎符合用法和意图。

它仅在gcc中工作。void*上的指针arthimetic未定义。在这种情况下,gcc将其视为char*。因此,修复遗留代码的最佳方法是小心地更改所有指向char*

的指针,因为它仅在g中工作在空的情况下,指针指针是不确定的。GCC在这种情况下把它当作一个字符。因此,修复遗留代码的最好方法是仔细地把所有指针都改成char。< /p> < P>从GNU C到C++的移植是不平凡的。

将此类事情移植到C++应该更仔细,特别是如果C代码从一开始就不太合适。类型,所以您应该在C++中使用该类型,而不是第二个猜测,如“代码> char < /代码>。显然,这不是C字符串,对于C字符串,执行<代码> += 4 < /代码>没有意义。因此,假设基类型的大小为<代码> 4 <代码>,可能从其余代码中猜测这是如何实现的。被解释


一旦您有了正确的类型,使用<代码> NeX[]/CODE分配数组。如果C++可以避免使用C++中的<代码> MalOC 。

< P>从GNU C到C++的移植是不平凡的。

将此类事情移植到C++应该更仔细,特别是如果C代码从一开始就不太合适。类型,所以您应该在C++中使用该类型,而不是第二个猜测,如“代码> char < /代码>。显然,这不是C字符串,对于C字符串,执行<代码> += 4 < /代码>没有意义。因此,假设基类型的大小为<代码> 4 <代码>,可能从其余代码中猜测这是如何实现的。被解释


一旦你有了合适的类型,使用<代码> NeX[]/CODE分配数组。如果你能避免,请不要在C++中使用<代码> MalOC 。< 4】看起来可疑地近似于<代码> siZeof(空洞*)< /Cord>这是自找麻烦。4看起来可疑地近似于<代码> sieZOF(空洞*)。这是自找麻烦。这是不正确的。Gcc将void*上的指针算法视为char*。这将是

p+=(sizeof(void)*4)
,当然这是无效的。你需要知道
*p
的预期类型才能给出正确的答案这是不正确的。Gcc将void*上的指针算法视为char*。这将是
p+=(sizeof(void)*4)
,当然这是无效的。你需要知道
*p
的预期类型才能给出正确的答案