如何添加到对象数组指针c++
How to add to object array pointer c++
我试图将对象添加到作为参数传递的对象数组中。具体来说,我有一个按钮数组,我正在向按钮数组添加一个后退按钮。我怎样才能正确地做到这一点?当我尝试下面的代码时,我从原始指针数组传递的按钮出现了一些奇怪的故障。
int createMenu(Button buttons[], int size)
{
//Stuff here
}
int menu(Button buttons[], int size, bool back)
{
Button * newButtons[size + 1];
for (int i = 1; i <= size; i++)
*newButtons[i] = buttons[i];
Button back(25, 19, "Back"); //Creates back button object
*newButtons[0] = back;
return createMenu(*newButtons, size + 1);
//Makes menu with the back button
}
在你的循环中你引用了buttons[size],这超出了它的边界。您还可以在不初始化newButtons成员的情况下解引用它们。你试着传递给createMenu
一个指针数组,当它期望一个按钮数组的时候。应该是这样的:
int menu(Button buttons[], int size, bool back)
{
Button * newButtons = new Button[size + 1];
for (int i = 0; i < size; i++)
newButtons[i + 1] = buttons[i];
newButtons[0] = Button(25, 19, "Back");
int result = createMenu(newButtons, size + 1);
delete [] newButtons;
return result;
}
作为参考,下面是使用vector时的样子:
int menu( std::vector<Button> buttons )
{
buttons.push_back( Button(25, 19, "Back") );
return createMenu( buttons );
}
如果按钮确实需要按在前面,那么有各种选择(例如,实际按在前面;或者使用deque而不是vector)。
试试这个。你正在使用Button*,所以传递Button对象的地址。
int menu(Button buttons[], int size, bool back)
{
Button ** newButtons = new Button*[size + 1];
for (int i = 1; i <= size; i++)
newButtons[i] = &buttons[i];
Button * back = new Button(9,11,"fdf"); //Creates back button object
newButtons[0] = back;
//Makes menu with the back button
createMenu(*newButtons, size+1);
}
void createMenu(Button buttons[], int size)
{
(buttons[0]).foo();
//Stuff here
}
另外,您使用相同的变量名称"back"作为bool和Button类的对象。改变这种状况。
相关文章:
- 将对象数组的引用传递给函数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 类对象数组的问题会导致崩溃
- Arduino C++在构造函数中用参数声明对象数组
- 使用对象数组对 SFML 进行动画处理
- C++ 对象数组堆栈溢出
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何初始化对象数组?
- C++创建对象数组
- 在对象数组中搜索字符串并返回相应值的函数
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 使用 C++ 创建对象数组
- 对象数组打印空白字符串
- 重载运算符 [] 用于从对象数组中给出特定索引
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组