调用 std::atomic_fetch_add,出现“没有匹配函数调用 'atomic_fetch_add'”错误
Calling std::atomic_fetch_add, getting ''No matching function for call to 'atomic_fetch_add' error
我的背景是 Swift 和 Objective-C,所以我对我正在处理的 C++ 文件中的这种行为感到困惑。
首先,这一行:
OSAtomicIncrement32Barrier(&changeCounter);
在 Xcode 中显示警告:
'OSAtomicIncrement32Barrier' is deprecated: first deprecated in iOS 10.0 - Use std::atomic_fetch_add() from <atomic> instead
没有汗水。我导入 <atomic>
并将该行替换为:
std::atomic_fetch_add(&changeCounter, 1);
但现在我得到了一个全面的错误:
No matching function for call to 'atomic_fetch_add'
changeCounter
定义如下:
volatile int32_t changeCounter = 0;
我也试过 volatile int
。但是没有变化。
我使用代码完成来获取该函数,据我所知我输入了正确的参数。我可以找到的文档(例如 here)显示 atomic_fetch_add
在使用中,我似乎也是这样做的。
知道如何解决这个问题吗?
RichardCritten 让我走上了正确的轨道,但除此之外还需要一些改进。主要解决方案是我将 changeCounter
的定义从
更改为
volatile int32_t changeCounter = 0;
到
std::atomic<int32_t> changeCounter = {0};
请注意 0
周围的大括号:这是因为 std::atomic<int32_t>
没有复制构造函数,因此仅使用 0
会给出错误
Copying member subobject of type 'std::atomic' (aka 'atomic') invokes deleted constructor
根据回答here,将要分配的值放在花括号中避免使用复制构造函数,从而解决了该问题。
我的背景是 Swift 和 Objective-C,所以我对我正在处理的 C++ 文件中的这种行为感到困惑。
首先,这一行:
OSAtomicIncrement32Barrier(&changeCounter);
在 Xcode 中显示警告:
'OSAtomicIncrement32Barrier' is deprecated: first deprecated in iOS 10.0 - Use std::atomic_fetch_add() from <atomic> instead
没有汗水。我导入 <atomic>
并将该行替换为:
std::atomic_fetch_add(&changeCounter, 1);
但现在我得到了一个全面的错误:
No matching function for call to 'atomic_fetch_add'
changeCounter
定义如下:
volatile int32_t changeCounter = 0;
我也试过 volatile int
。但是没有变化。
我使用代码完成来获取该函数,据我所知我输入了正确的参数。我可以找到的文档(例如 here)显示 atomic_fetch_add
在使用中,我似乎也是这样做的。
知道如何解决这个问题吗?
RichardCritten 让我走上了正确的轨道,但除此之外还需要一些改进。主要解决方案是我将 changeCounter
的定义从
volatile int32_t changeCounter = 0;
到
std::atomic<int32_t> changeCounter = {0};
请注意 0
周围的大括号:这是因为 std::atomic<int32_t>
没有复制构造函数,因此仅使用 0
会给出错误
Copying member subobject of type 'std::atomic' (aka 'atomic') invokes deleted constructor
根据回答here,将要分配的值放在花括号中避免使用复制构造函数,从而解决了该问题。