私は、Visual C++ コンパイラ 2010 (および 2008) で作成され、動作するプロジェクトに取り組んでいます。新しい VC++11 を使用しようとしていますが、既に実装されている機能に問題があります。typdef struct atom_intとmemory_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全体をオーバーライドする方法、またはメンバーをに追加する方法は? ありがとうございました