Как сделать приведение к типу int (*)[]

194
13 октября 2018, 20:00

У меня есть класс с матрицей который вызывает другую функцию и туда её передает

 class A
{
  int field[20][10];
 public:
  void method()
  {
   func((/*Здесь сделать преобразование*/)field);
  }
};

но функция принимает тип int (*)[]. Мне нужно в кругліх скобках сделать преобразование но не знаю как написать

Answer 1

Неоднозначности из-за того, что указатель и массив - это все же разные типы. Поэтому тут приведение не подойдет. Указатель на указатель и массив указателей, соответственно также разные типы. Нужно изменить функцию func.

В вашем случае возможны следующие решения:

1. Функция для конкретного массива (подойдет, если у вас функция работает только с массивами определенного и заранее известного размера)

void func(int matrix[][10]);

2. Обобщенный шаблон

template <size_t Size>
void func(int matrix[][Size]);

Но все же, если вы пишите на С++, лучше использовать средства из стандартной библиотеки. std::array практически не уступает в эффективности встроенным массивам.

Answer 2

Буквальный ответ на ваш вопрос выглядит так

class A
{
  int field[20][10];
 public:
  void method()
  {
    func((int (*)[]) field);
  }
};

То есть вот прямо так в скобках и пишите. (Поэтому не понятно, что у вас тут вызвало затруднения.)

А уж что функция func будет дальше делать с этим типом - это из вашего вопроса не ясно. Формально все, что она может сделать - это преобразовать его обратно к "правильному" типу.

Answer 3

можете так:

void method()
{
    for (int i = 0; i < 20; ++i)
        func(field[i]);
}

если я вас правильно понел...

READ ALSO
Что такое rvalue и lvalue?

Что такое rvalue и lvalue?

На разных ресурсах нашел разные определения rvalue, lvalueКак же правильно?

210
Помогите мне с system();

Помогите мне с system();

В общем я делаю оболочку для одной программыДля запуска этой программы нужно в cmd отправить вот такой запрос: "C:\folder\executable

164
Как отсортировать вектор объектов C++

Как отсортировать вектор объектов C++

Есть класс Date (день, месяц, год) И есть вектор этих объектов Надо с помощью обычной сортировки sort() отсортировать по году и по названию месяца

162
Как собрать все objectName в ui_widgetname.h?

Как собрать все objectName в ui_widgetname.h?

Вопрос по Qt/ Создал много виджетов которые загружаются на одной главной формеМне нужно собрать все ключи чтобы менять объектам текст(лэйбл)

191