2016-11-28 44 views
0

我剛剛發現我的測試平臺之間使用std :: copysign有些不兼容。使用std :: copysign與g ++

在第一次測試中,我嘗試在MSVC中測試一些算法。現在我試圖將這個C++(11)代碼移植到Xilinx Zynq平臺(A9 + FPGA)。

這是工作到目前爲止,除了沒有std :: copysign包括cmath。所以我必須使用沒有命名空間的copysign。

將該函數添加到名稱空間的正確方法是什麼?

PS:我不想在不同的平臺上手動管理相同的文件,只是爲了命名空間不兼容。

編譯標誌是:

-c -fmessage-length=0 -MT"[email protected]" -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -std=c++11 
+0

你在g ++中使用了哪些編譯器選項?你確定C++ 11已啓用嗎? – wasthishelpful

+0

我使用的是基於Eclipse的某種Xilinx sdk(2016.3)。 我正在使用標誌「-c -fmessage-length = 0 -MT」$ @「-mcpu = cortex-a9 -mfpu = vfpv3 -mfloat-abi = hard -std = C++ 11」 –

+0

你可以發佈當您構建代碼時出現完全錯誤? – Danh

回答

0

你可以創建MSVC宏。

#if defined(_MSC_VER) 
#define copysign std::copysign 
#endif 

但是,C++ 11應該有std命名空間。如果你沒有編譯啓用C++ 11,你可能會得到一組更老的庫?我會檢查以確保你是。如果你不能在你的平臺上用C++ 11進行編譯,那麼上面的代碼就可以工作。如果需要,添加更多預處理器標誌以定位更多平臺。

另一種選擇是

using namespace std; 

這將涵蓋這兩種情況。

+0

我用C++ 11 auto編譯,其他一些函數的工作方式和預期的一樣。 另外問題不是MSVC,問題是Xilinx SDK中使用的arm gcc。 –

+1

你也可以把'using namespace std;'在那裏,這將涵蓋兩個選項。 – user2927848