调用std :: atomic_fetch_add,得到''没有匹配函数来调用' atomic_fetch_add'错误

时间:2017-09-22 07:44:13

标签: c++ ios xcode deprecation-warning

我的背景是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在使用中,我似乎也是这样做的。

知道如何解决这个问题吗?

1 个答案:

答案 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,将值赋予花括号可以避免使用复制构造函数,从而解决了这个问题。