2012-09-07 56 views
0

我正在编写和使用Visual C++编译器2010(和2008)一起工作的项目。我正在尝试使用新的VC++ 11,但是我对已经实现的功能有问题。 我们已经实施typdef结构atomic_intmemory_order但他们在VC补充11基本相同的功能,我得到这些错误扩展typedef结构(与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 

那我要是追到我们的实现为#如果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 11中没有实现,而另一个功能不能转换参数

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 

请帮我找一些解决方案...如何覆盖整个atomic_int从VC++ 11,或如何将memeber添加到? 谢谢

+2

“Compilator”呃?这是一种新的工具吗? –

+0

,因为在上面的任何代码中都不存在有问题的方法(compare_swap)和通话列表中的无效参数(第二个错误),所以我将提出我的推测上限,并建议问题出在代码NOT NOT向我们展示。 – WhozCraig

+0

对不起,我的错误......当然编译器 – Lipov3cz3k

回答

1

所以compare_swap函数是std :: atomic_compare_exchange_weak/strong中的旧草稿名称。它已经在C++ 11中实现了,但我们使用了旧名称。

的另一错误C2664还旧草案问题(缺失重载负载方法)。