クラスのバックトラッキング問題を書いていますが、いくつかの既存の関数を実装する必要があります。これは私が実装しなければならない機能の1つです。これvoid *input
は、データを渡すことになっている場所です。私の場合は、2次元のベクトルです。
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ポインタを使用して何でも渡すことができると思いました。ここで何が起こっているのですか?