我正在编写一个与Visual C ++编译器2010(和2008)一起编写的项目。我正在尝试使用新的VC ++ 11,但是我已经实现了函数的问题。 我们已经实现了 typdef struct atomic_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 statment
#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 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 ,或者如何添加memeber? 谢谢
答案 0 :(得分:1)
所以 compare_swap 函数是std :: atomic_compare_exchange_weak / strong的旧草案名称。它已经在C ++ 11中实现,但我们使用了旧名称。
另一个错误 C2664 也是旧草稿的问题(缺少重载加载方法)。