调用 std::atomic_fetch_add,收到调用"atomic_fetch_add"错误的不匹配函数

Calling std::atomic_fetch_add, getting ''No matching function for call to 'atomic_fetch_add' error

本文关键字:add 调用 fetch atomic 函数 不匹配 错误 std      更新时间:2023-10-16

我的背景在迅速而objective-c中,所以我在正在处理的C 文件中对此行为感到困惑。

首先,这一行:

OSAtomicIncrement32Barrier(&changeCounter);

在xcode中显示警告:

'osatomicincrement32barrier'已弃用:首先在iOS 10.0中弃用 - 从< atomic>使用std :: atomic_fetch_add()而是

没有汗水。我导入<atomic>并用以下方式替换该行

std::atomic_fetch_add(&changeCounter, 1);

但是现在我有一个成熟的错误:

无匹配函数呼叫'atomic_fetch_add'

changeCounter是这样定义的:

volatile int32_t changeCounter = 0;

我也尝试过它作为volatile int。但是没有变化。

我使用代码完成来获取该函数,据我所知,我要提出正确的参数。我可以找到(例如,在此处)显示使用中的atomic_fetch_add,我似乎正在这样做。同样的方式。

任何想法如何解决此问题?

理查德(Richardcritten)使我走上了正确的轨道,但是除此之外,它还需要更多的意义。主要解决方案是我从

更改了changeCounter的定义
volatile int32_t changeCounter = 0;

to

std::atomic<int32_t> changeCounter = {0};

请注意0周围的卷曲括号:这是因为std::atomic<int32_t>没有复制构造函数,因此仅使用0给出错误

复制构件的子对象类型为" std :: atomic'(又称原子")调用已删除的构造函数

根据此处的答案,将要分配的值放在卷发括号中避免使用复制构造器,从而解决了该问题。