gpt4 book ai didi

c++ - 错误 : jump to label 'failed' [-fpermissive], GCC 与 VS

转载 作者:行者123 更新时间:2023-12-05 04:13:27 25 4
gpt4 key购买 nike

我们在游戏引擎的 PNG 解码例程中添加了一些新代码。定义的额外 block 只是用来读取一些值——没什么大不了的。

在 Visual C++ 上,它编译得很好。在我们主要使用的 GCC 上,我们现在遇到了一个以前从未发生过的奇怪问题:

compile_problems

这是添加的代码:

    /* read grAb chunk */
png_unknown_chunk *unknowns;
int num_unknowns = png_get_unknown_chunks(png_ptr, info_ptr, &unknowns);

for (int i = 0; i < num_unknowns; i++)
{
if (!memcmp(unknowns[i].name, "grAb", 4))
{
png_grAb_t *grAb = reinterpret_cast<png_grAb_t *>(unknowns[i].data);
grAb->x = EPI_BE_S32(grAb->x) + 160 - width / 2;
grAb->y = EPI_BE_S32(grAb->y) + 200 - 32 - height;
img->grAb = grAb;
break;
}
}

我觉得还不错。这是添加到我们原始文件中的唯一内容。完整的文件在这里: goto Line 59 of image_data.cc

还有这个炸毁的函数:image_data_c *PNG_Load(file_c *f, int read_flags)

我不明白会发生什么,因为这之前工作得很好,并且从未遇到过交叉初始化或我们的案例处理问题。

如果我能得到一些帮助,我将不胜感激!


最佳答案

错误看起来很清楚:从 int num_unknowns 初始化之前到它之后都有到标签 failed: 的跳转,因此 int 将具有垃圾值。这在 C++ 中是被禁止的(但在 C 中不是)。

一个解决方案是把

int num_unknowns = 0;

在函数的开头,将您发布的代码示例的第三行更改为对 num_unknowns 的赋值。

另一个解决方案是使用 -fpermissive 选项指示 GCC 允许这样做,正如错误本身所指示的那样。

关于c++ - 错误 : jump to label 'failed' [-fpermissive], GCC 与 VS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37636152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com