Я знаю, что вы можете передать многомерный массив в функцию, используя:
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
Может ли кто-нибудь объяснить, почему это происходит?
Вы должны написать, как компилятор говорит
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
}
Вы должны использовать:
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
}
int
вместо Bar
. Или вы можете попробовать это: Bar (*a)[10]; decltype(a) Clas2::getBars() { return bars; //Where bars is a member of a class }