Передача многомерного массива между классами

0

Я знаю, что вы можете передать многомерный массив в функцию, используя:

void Class1::foo(Bar bars[][10])
{
   // Do stuff
}

и что вы можете вернуть указатель на первый элемент в одномерном массиве, используя:

Bar* Clas2::getBars()
{
   return bars;  //Where bars is a member of a class
}

Однако, когда "bars" является многомерным массивом, я получаю ошибку:

Cannot convert Bar (*)[10] to Bar* in return

Может ли кто-нибудь объяснить, почему это происходит?

Теги:
multidimensional-array
parameter-passing
compiler-errors

2 ответа

1
Лучший ответ

Вы должны написать, как компилятор говорит

Bar (*)[10] Clas2::getBars()
{
   return bars;  //Where bars is a member of a class
}

Вы правильно сказали, что "вы можете вернуть указатель на первый член в массиве..". Элементом или более точным элементом вашего двумерного массива является одномерный массив типа Bar [10]. Указатель на этот элемент будет выглядеть как Bar (*)[10]

О, я сожалею, действительно, будет

Bar (* Clas2::getBars() )[10]
{
   return bars;  //Where bars is a member of a class
}

Или вы можете использовать typedef. Например

typedef Bar ( *BarPtr )[10];
BarPtr Clas2::getBars()
{
   return bars;  //Where bars is a member of a class
}
  • 0
    Когда я это делаю, я получаю сообщение об ошибке: «unqualified-id before») и заявляет, что getBars () не возвращает тип.
  • 0
    @Xemerau Я обновил свой пост. Если вы использовали конструкцию из удаленного поста, то в чем ошибка и какую конструкцию вы использовали?
Показать ещё 1 комментарий
0

Вы должны использовать:

Bar (*Clas2::getBars())[10]
{
    return bars;  //Where bars is a member of a class
}

или лучше выглядящий способ:

typedef Bar (*Bar10x10ptr)[10];

Bar10x10ptr Clas2::getBars()
{
    return bars;  //Where bars is a member of a class
}
  • 0
    Если я делаю это, я получаю ошибку, указывающую, что getBars объявлена как функция, возвращающая массив, что похоже на то, что я хотел сделать.
  • 0
    На GCC работает нормально. Попробуйте проверить это с помощью int вместо Bar . Или вы можете попробовать это: Bar (*a)[10]; decltype(a) Clas2::getBars() { return bars; //Where bars is a member of a class }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню