2017-09-22 3 views
0

私の背景はSwiftとObjective-Cですので、作業中のC++ファイルでこの動作が混乱しています。すべてのstd :: atomic_fetch_addを呼び出すと、 '' atomic_fetch_add 'エラーへの呼び出しで一致する関数がありません

まず、この行は:

'OSAtomicIncrement32Barrier' is deprecated: first deprecated in iOS 10.0 - Use std::atomic_fetch_add() from <atomic> instead

ありません汗:Xcodeで

OSAtomicIncrement32Barrier(&changeCounter); 

それは警告が表示されます。私は<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などのドキュメントが使用中であることがわかりました。同じ方法。

どのようにすればこの問題を解決できますか?

+0

'changeCounter'は' std :: atomic 'にする必要があることに注意してください。http://en.cppreference.com/w/cpp/atomic/atomic_fetch_add現在のC++では' volatile'とは関係ありませんマルチスレッド化。 –

+0

@RichardCritten私は 'atomic '型をチェックします。このファイルはもともとAppleによって書かれたもので、 'volatile'はそこから始まったのです。 – ajbmdi

+0

@RichardCritten 'changeCounter'を' std :: atomic 'に変更しましたが、このエラーが発生しました:"タイプ 'std :: atomic '(別名 '')のメンバサブオブジェクトをコピーすると、コンストラクタ" – ajbmdi

答えて

0

RichardCritten私は正しい軌道に乗っていますが、それ以上の苦しみが必要でした。主な解決策は、私が

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

注周り0中括弧に

volatile int32_t changeCounter = 0; 

からchangeCounterの定義を変更したことである。これだけ0が与える使用して、std::atomic<int32_t>にはコピーコンストラクタが存在しないためでありますエラー

回答hereによれば、中括弧で値を代入すると、コピーコンストラクタの使用が回避され、その問題が修正されます。

関連する問題