我的背景是Swift和Objective-C,所以我在我正在处理的C ++文件中对此行为感到困惑。
首先,这一行:
OSAtomicIncrement32Barrier(&changeCounter);
在Xcode中显示警告:
' OSAtomicIncrement32Barrier'不推荐使用:在iOS 10.0中首先弃用 - 使用来自< atomic>的std :: atomic_fetch_add()代替
没有汗水。我导入<atomic>
并将该行替换为:
std::atomic_fetch_add(&changeCounter, 1);
但现在我得到了一个全面的错误:
因此定义了没有用于调用&#39; atomic_fetch_add&#39;
的匹配函数
changeCounter
:
volatile int32_t changeCounter = 0;
我也尝试过volatile int
。但没有变化。
我使用代码完成功能来获取该功能,据我所知,我将正确的参数放入。我可以找到的文档(例如,here)显示atomic_fetch_add
在使用中,我似乎也是这样做的。
知道如何解决这个问题吗?
答案 0 :(得分:0)
RichardCritten让我走上了正确的轨道,但除此之外还需要更多的补充。主要解决方案是我从
更改了changeCounter
的定义
volatile int32_t changeCounter = 0;
到
std::atomic<int32_t> changeCounter = {0};
请注意0
周围的大括号:这是因为std::atomic<int32_t>
没有复制构造函数,因此仅使用0
会出现错误
复制&#39; std :: atomic&#39;类型的成员子对象(又名&#39; atomic&#39;)调用已删除的构造函数
根据答案here,将值赋予花括号可以避免使用复制构造函数,从而解决了这个问题。