2012-09-07 88 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還舊草案問題(缺失重載負載方法)。