我正在为我的班级写一个回溯问题,我必须实现一些现有的功能。这是我必须实现的功能之一。这void *input
是我们应该传入数据的地方,在我的例子中是一个二维向量。
void process_solution(int a[], int k, void *input, bool *finished)
{
int sumweight = 0;
int sumvalue = 0;
std::vector<std::vector<int> > *datavector = static_cast<std::vector<std::vector<int> >* >(input);
for(unsigned i=0; i<sizeof(a); i++)
{
sumweight += a[i]*datavector[i][0];
sumvalue += a[i]*datavector[i][1];
}
}
但是,我认为我的演员阵容有问题,因为我在线路上遇到错误sumweight += a[i]*datavector[i][0];
错误:在 '*(a + ((long long unsigned int)(((long long unsigned int)i) * 4ull))) * (datavector + ((long long unsigned int)(( (long long unsigned int)i) * 24ull)))->std::vector<_Tp, _Alloc>::operator[] with _Tp = std::vector, _Alloc = std::allocator >, std::vector< _Tp, _Alloc>::reference = std::vector&, std::vector<_Tp, _Alloc>::size_type = long long unsigned int'
如果我尝试使用另一个变量来访问向量,例如int t1 = datavector[i][0];
,我会得到一个错误
错误:无法在初始化中将 'std::vector' 转换为 'int'
我认为 void 指针可以用来传递任何东西,只要进行了正确的转换。这里发生了什么?