Хотя будет существовать маршрут, который должен работать через приведение, простейшая вещь, которую я могу гарантировать, будет работать - это создать массив указателей на int
s, который содержит указатели на массивы в источнике vector
.
// make vector of pointers to int
std::vector<int*> table2(table.size());
// fill pointer vector pointers to arrays in array vector
for (int i = 0; i < size; i++ )
{
table2[i] = table[i];
}
Пример:
#include <vector>
#include <iostream>
#include <iomanip>
#include <memory>
constexpr int size = 4;
// test by printing out
void func(int ** arr)
{
for (int i = 0; i < size; i++ )
{
for (int j = 0; j < size; j++ )
{
std::cout << std::setw(5) << arr[i][j] << ' ';
}
std::cout << '\n';
}
}
int main()
{
std::vector<int[size]> table(size);
// fill values
for (int i = 0; i < size; i++ )
{
for (int j = 0; j < size; j++ )
{
table[i][j] = i*size +j;
}
}
// build int **
std::vector<int*> table2(table.size());
for (size_t i = 0; i < size; i++ )
{
table2[i] = table[i];
}
//call function
func(table2.data());
}
Похоже, вы застряли, выполняя это из-за требования int **
, когда возможно попытайтесь использовать aкласс простой матрицы вместо.