Объявите
void init_capabilities(Capabilities ***capabilities)
как
void init_capabilities(Capabilities **capabilities)
и вызовите
init_capabilities(result.capabilities);
Вам просто нужно передать указатель на структуру массива, а не указательна указатель вашей структуры массива.
Редактировать : И, как уже отмечали другие, если вы собираетесь использовать C ++, вам действительно следует использовать new
, как в:
result.capabilities = new (Capabilities *)[6];
for(int i=0;i<6;i++) {
result.capabilities[i] = new Capabilities[8];
}
init_capabilities(result.capabilities);
...
void init_capabilities(Capabilities **capabilities) {
for(int i=0;i<6;i++) {
for(int j=0;j<8;j++) {
capabilities[i][j].room_capabilities = new RoomCapability[rooms_count];
}
}
}
И не забудьте использовать delete[]
.Более того, делайте так, как предлагает Роб, и используйте заранее определенные контейнеры C ++ для обработки такого рода вещей.Но если вы действительно хотите использовать небезопасные указатели, то, что у меня есть выше, должно помочь вам сделать это.