如何正确地将std :: vector >强制转换为void *并重新解释回它?

问题描述 投票:0回答:2

我不是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);

任何帮助都会很棒。谢谢!

c++ nlopt
2个回答
0
投票

设置代码为:


-1
投票

解决方案来自@ Aplet123的评论对我有用。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.