gpt4 book ai didi

c++ - 为什么这不访问 vector 位置?

转载 作者:行者123 更新时间:2023-11-30 01:22:55 25 4
gpt4 key购买 nike

我正在为我的类(class)写一个回溯问题,我必须实现一些现有的功能。这是我必须实现的功能之一。 void *input 是我们应该传入数据的地方,在我的例子中是一个二维 vector 。

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];

error: no match for 'operator*' in '*(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'

如果我尝试使用另一个变量来访问 vector ,例如 int t1 = datavector[i][0];,我会得到一个错误

error: cannot convert 'std::vector' to 'int' in initialization

我认为 void 指针可用于传递任何内容,只要进行了正确的转换即可。这是怎么回事?

最佳答案

您的 datavector 变量是一个指向 int vector 的 vector 的指针,因此您应该应用适当的解除引用:

sumweight += a[i] * (*datavector)[i][0];
// ^^^^^^^^^^^^^

sumvalue += a[i] * (*datavector)[i][1];
// ^^^^^^^^^^^^^

此外,这个:

for (unsigned i=0; i < sizeof(a); i++)
// ^^^^^^^^^

不会计算数组中元素的数量(这让我觉得您没有使用的 k 参数应该包含那个数组)。

关于c++ - 为什么这不访问 vector 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com