【发布时间】:2020-07-25 13:11:08
【问题描述】:
我不是 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++ 中 NLopt 包的 opt.set_min_objective(vfunc vf, void *f_data) 函数。
基于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);
任何帮助都会很棒。谢谢!
【问题讨论】:
-
你试过
(void*) &my_data吗? -
您可以将向量的 data() 重新解释为向量指针。它不是向量,它是指向内部数据的指针,减去所有控制数据。 reinterpret_cast 说'相信我,这是一个指向向量的指针',它信任你并打破了。你想做什么
-
@Aplet123 演员表是多余的
-
您不是“C++ 专家”并且不太了解如何做到这一点,这是完全可以理解的。你应该很高兴得知真正的 C++ 专家也不会做任何此类事情,所以你是一个很好的伙伴。