Вызов std :: atomic_fetch_add, получение ошибки «Нет подходящей функции для вызова atomic_fetch_add»

Я работаю в Swift и Objective-C, поэтому меня смущает это поведение в файле C ++, над которым я работаю.

Прежде всего, эта строка:

OSAtomicIncrement32Barrier(&changeCounter);

В XCode это показывает предупреждение:

«OSAtomicIncrement32Barrier» устарел: первый устарел в iOS 10.0 — используйте 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 в использовании, и я, кажется, делаю это так же.

Есть идеи, как решить эту проблему?

0

Решение

RichardCritten поставил меня на правильный путь, но это потребовало немного больше усилий. Основным решением является то, что я изменил определение changeCounter от

volatile int32_t changeCounter = 0;

в

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

Обратите внимание на фигурные скобки вокруг 0: это потому, что нет конструктора копирования для std::atomic<int32_t>так что используя только 0 выдает ошибку

Копирование подобъекта члена типа ‘std :: atomic’ (он же ‘atomic’) вызывает удаленный конструктор

Согласно ответу Вот, размещение значения для присвоения в фигурных скобках позволяет избежать использования конструктора копирования, что устраняет эту проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]