调用 std::atomic_fetch_add,收到调用"atomic_fetch_add"错误的不匹配函数
Calling std::atomic_fetch_add, getting ''No matching function for call to 'atomic_fetch_add' error
我的背景在迅速而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'(又称原子")调用已删除的构造函数
根据此处的答案,将要分配的值放在卷发括号中避免使用复制构造器,从而解决了该问题。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 函数何时会在c++中包含stack_Unwind_Resume调用