如何添加到对象数组指针c++

How to add to object array pointer c++

本文关键字:对象 数组 指针 c++ 何添加 添加      更新时间:2023-10-16

我试图将对象添加到作为参数传递的对象数组中。具体来说,我有一个按钮数组,我正在向按钮数组添加一个后退按钮。我怎样才能正确地做到这一点?当我尝试下面的代码时,我从原始指针数组传递的按钮出现了一些奇怪的故障。

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类的对象。改变这种状况。