0

私は、Visual C++ コンパイラ 2010 (および 2008) で作成され、動作するプロジェクトに取り組んでいます。新しい VC++11 を使用しようとしていますが、既に実装されている機能に問題があります。typdef struct atom_intmemory_orderは既に実装していますが、VC 11 でほぼ同じ関数を追加したため、これらのエラーが発生します。

error C2011: 'std::memory_order' : 'enum' type redefinition 
(D:\_work\wp-test\lib\Item.cpp) d:\_work\wp-test\lib\system\Atomic.h

実装を #if ステートメントにキャッチすると

#if _MSC_VER >= 1700
#include <atomic>
#else
//out implementation
namspace std{
  typedef enum memory_order
  {
   memory_order_relaxed,
   ...
  } memory_order;
  typedef struct atomic_int{
   ...
  }
}
#endif

動作しているように見えますが、VC 11 に実装されていない 1 つの関数が欠落しており、別の関数がパラメーターを変換できません

error C2039: 'compare_swap' : is not a member of 'std::atomic_int'
D:\_work\wp-test\lib\network\ConnectionSocket.cpp

error C2664: 'std::atomic_int::atomic_int(const std::atomic_int &)' : 
cannot convert parameter 1 from 'int' to 'const std::atomic_int &' 
(D:\_work\wp-test\lib\Item.cpp) D:\_work\wp-test\lib\system\Cache.h

解決策を見つけるのを手伝ってください... VC++ 11からatomic_int全体をオーバーライドする方法、またはメンバーをに追加する方法は? ありがとうございました

4

1 に答える 1

1

したがって、compare_swap関数は std::atomic_compare_exchange_weak/strong の旧ドラフト名です。既に C++11 で実装されていますが、古い名前を使用していました。

別のエラーC2664も古いドラフトの問題です (オーバーロードされたロードメソッドがありません)。

于 2012-09-07T12:46:32.577 に答える