我不是c ++专家,在将std::vector< std::vector<double> > my_data
强制转换为void *f_data
并重新解释此强制转换时遇到问题。
基本上我需要转换my_data
:
std::vector<double> point1(2);
point1[0] = 0.06; point1[1] = 2.07;
std::vector<double> point2(2);
point2[0] = 1.01; point2[1] = 0.02;
std::vector< std::vector<double> > my_data;
my_data.push_back(point1);
my_data.push_back(point2);
以便适合来自c ++中opt.set_min_objective(vfunc vf, void *f_data)
包的NLopt函数。
基于this post,我正在尝试以下操作,但不起作用:
auto *test = static_cast<void*>(my_data.data());
std::vector< std::vector<double> > *this_data = reinterpret_cast<std::vector< std::vector<double> >*>(test);
在调试时收到以下错误:
this_data=Cannot access memory at address 0x3faeb851eb851eb8
我也尝试过这种方法,但是它也不起作用:
auto test = static_cast<void*>(my_data.data());
std::vector< std::vector<double> > *this_data = reinterpret_cast<std::vector< std::vector<double> >*>(test);
任何帮助都会很棒。谢谢!
设置代码为:
解决方案来自@ Aplet123的评论对我有用。谢谢!