我正在爲我的課寫一個回溯問題,我必須實現一些現有的功能。這是我必須實現的功能之一。 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];
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'
如果我嘗試使用另一個變量來訪問向量,像int t1 = datavector[i][0];
,我得到一個錯誤
error: cannot convert 'std::vector' to 'int' in initialization
我想到了一個空指針可以用來傳遞任何東西,只要適當的鑄製成。這裏發生了什麼?
這裏唯一有效傳入'void *'的東西是'std :: vector *'。當你可以使用模板時不要使用'void *'! –
Pubby
2013-03-24 23:38:51
它是一個向量矢量的*指針*。在開始鑽入'operator []'之前,您需要取消引用指針。即'(* datavector)[i] [0]' – WhozCraig 2013-03-24 23:39:42
還要注意'sizeof(a)'等價於sizeof(int *)'。我懷疑這不是你打算在這裏做的。 – 2013-03-24 23:40:55