在我的main函数中,我创建了某个类“Menu”的对象数组
当我调用一个函数时,我想提供一个指向该数组的指针。
Menu menu[2];
// Create menu [0], [1]
Function(POINTER_TO_ARRAY);
问题:编写函数参数的正确方法是什么?
我试试:
Function(&menu);
并在Header文件中:
void Function(Menu *menu[]); // not working
error: Cannot convert parameter 1 from Menu(*)[2] to Menu *[]
void Function(Menu * menu); // not working
error: Cannot convert parameter 1 from Menu(*)[2] to Menu *[]
我无法想出任何其他方法来解决这个问题。
简单地说,我希望能够通过指针访问函数内的Menu数组。指向数组指针的普通指针有什么区别?
答案 0 :(得分:9)
声明:
void Function(Menu* a_menus); // Arrays decay to pointers.
调用:
Function(menu);
但是,您需要通知Function()
数组中有多少条目。因为这是C ++建议使用std::array
或std::vector
知道它们的大小,开头和结尾:
std::vector<Menu> menus;
menus.push_back(Menu("1"));
menus.push_back(Menu("2"));
Function(menus);
void Function(const std::vector<Menu>& a_menus)
{
std::for_each(a_menus.begin(),
a_menus.end(),
[](const Menu& a_menu)
{
// Use a_menu
});
}
答案 1 :(得分:3)
通过const或非const指针
void Function(Menu const* menu);
void Function(Menu* menu);
...或通过const或非const引用
void Function(Menu const (&menu)[2]);
void Function(Menu (&menu)[2]);
可以推广到模板,以便编译器推导出数组大小:
template<size_t N> void Function(Menu const (&menu)[N]);
template<size_t N> void Function(Menu (&menu)[N]);
始终呼叫Function(menu);
答案 2 :(得分:3)
使用
时应该有效 void Function(Menu * menu);
并使用
致电Function(menu);
而不是
Function(&menu);
传递数组名称会导致它衰减为指向数组中包含的类型的指针。但是,正如@hmjd在他的回答中所说,你还需要传递数组大小,所以如果这个选项对你开放,他建议使用向量是有利的。
答案 3 :(得分:0)
您可以使用
Function((void *) whatever_pointer_type_or_array_of_classes);
在您的主要。
在功能中:
type Function(void * whatever)
{
your_type * x =(your_type *) whatever;
//use x
....
x->file_open=true;
....
}