我正在使用标准C ++库标头中的内置复数类std::complex
。我在HLS工具中应用了代码。该工具无法访问该复杂类的私有成员变量。可以公开吗?我该怎么办?
Error: /usrf01/prog/mentor/2015-16/RHELx86/QUESTA-SV-AFV_10.4c-5/questasim/gcc-4.7.4-linux_x86_64/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.7.4/../../../../include/c++/4.7.4/complex(222):
error: 'fpml::fixed_point<int, 16u, 15u> std::complex<fpml::fixed_point<int, 16u, 15u> >::_M_real' is private
答案 0 :(得分:4)
std::complex
模板有些神奇:您拥有明确的许可,可以将复数重新解释为两个标量的数组。一般来说,以下内容是有效的:
std::complex<float> a[10];
float* r = reinterpret_cast<float*>(a);
for (int i = 0; i != 20; ++i) std::cout << r[i] << '\n';
也就是说,您可以将复数数组视为实数两倍的数组。您可以使用这种方法分别访问复数的元素。
尽管要注意以下约束([complex.numbers] p2):
为
complex
,float
或double
以外的任何类型实例化模板long double
的效果是 未指定。
答案 1 :(得分:3)
仅此而已,访问成员的另一种方法是使用相应的getter,例如
#include <complex>
int main()
{
std::complex<float> c;
c.real(1);
c.imag(2);
return c.real();
}