2016-11-28 46 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