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

C++ 如何添加到对象数组指针c++;,c++,arrays,class,pointers,object,C++,Arrays,Class,Pointers,Object,我试图将一个对象添加到作为参数传递的对象数组中。具体来说,我有一个按钮数组,我正在向按钮数组添加一个后退按钮。我怎样才能正确地做到这一点?当我尝试下面的代码时,从原始指针数组传递的按钮出现了一些奇怪的小故障 int createMenu(Button buttons[], int size) { //Stuff here } int menu(Button buttons[], int size, bool back) { Button * newButtons[size +

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

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
}
int createMenu(按钮[],int size)
{
//这里的东西
}
int菜单(按钮[],int大小,bool back)
{
按钮*新按钮[尺寸+1];

对于(inti=1;i试试这个。您使用的是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
}
int菜单(按钮[],int大小,bool back)
{
按钮**新按钮=新按钮*[大小+1];

对于(inti=1;i试试这个。您使用的是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
}
int菜单(按钮[],int大小,bool back)
{
按钮**新按钮=新按钮*[大小+1];

对于(inti=1;i试试这个。您使用的是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
}
int菜单(按钮[],int大小,bool back)
{
按钮**新按钮=新按钮*[大小+1];

对于(inti=1;i试试这个。您使用的是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
}
int菜单(按钮[],int大小,bool back)
{
按钮**新按钮=新按钮*[大小+1];

对于(int i=1;i,在循环中引用按钮[size],这超出了它的边界。您还可以在不初始化新按钮的情况下取消引用这些按钮的成员。当它需要一个按钮数组时,您尝试传递
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;
}
int菜单(按钮[],int大小,bool back)
{
按钮*新按钮=新按钮[大小+1];
对于(int i=0;i
在循环中,您引用了超出其边界的按钮[size]。您还取消了对新按钮成员的引用,而没有对其进行初始化。当它需要一个按钮数组时,您尝试传递一个指针数组。应该是这样的:

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;
}
int菜单(按钮[],int大小,bool back)
{
按钮*新按钮=新按钮[大小+1];
对于(int i=0;i
在循环中,您引用了超出其边界的按钮[size]。您还取消了对新按钮成员的引用,而没有对其进行初始化。当它需要一个按钮数组时,您尝试传递一个指针数组。应该是这样的:

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;
}
int菜单(按钮[],int大小,bool back)
{
按钮*新按钮=新按钮[大小+1];
对于(int i=0;i
在循环中,您引用了超出其边界的按钮[size]。您还取消了对新按钮成员的引用,而没有对其进行初始化。当它需要一个按钮数组时,您尝试传递一个指针数组。应该是这样的:

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;
}
int菜单(按钮[],int大小,bool back)
{
按钮*新按钮=新按钮[大小+1];
对于(int i=0;i
以下是使用向量时的外观,仅供参考:

int menu( std::vector<Button> buttons )
{
    buttons.push_back( Button(25, 19, "Back") );
    return createMenu( buttons );
}
int菜单(标准::矢量按钮)
{
按钮。向后推(按钮(25,19,“向后”);
返回创建菜单(按钮);
}

如果确实需要在前部按下按钮,则有多种选项(例如,在前部实际按下按钮;或使用deque而不是矢量)。

以下是使用矢量时的外观,以供参考:

int menu( std::vector<Button> buttons )
{
    buttons.push_back( Button(25, 19, "Back") );
    return createMenu( buttons );
}
int菜单(标准::矢量按钮)
{
按钮。向后推(按钮(25,19,“向后”);
返回创建菜单(按钮);
}

如果确实需要在前部按下按钮,则有多种选项(例如,在前部实际按下按钮;或使用deque而不是矢量)。

以下是使用矢量时的外观,以供参考:

int menu( std::vector<Button> buttons )
{
    buttons.push_back( Button(25, 19, "Back") );
    return createMenu( buttons );
}
int菜单(标准::矢量按钮)
{
按钮。向后推(按钮(25,19,“向后”);
返回创建菜单(按钮);
}

如果确实需要在前部按下按钮,则有多种选项(例如,在前部实际按下按钮;或使用deque而不是矢量)。

以下是使用矢量时的外观,以供参考:

int menu( std::vector<Button> buttons )
{
    buttons.push_back( Button(25, 19, "Back") );
    return createMenu( buttons );
}
int菜单(标准::矢量按钮)
{
按钮。向后推(按钮(25,19,“向后”);
返回创建菜单(按钮);
}


如果确实需要在前部按下按钮,则有多种选项(例如,在前部实际按下按钮;或使用deque而不是矢量).

是否有必要使用数组?一般来说,避免使用数组,使用向量。我从未查看过它们。它们的内存会更大还是更小?我在一个具有3MB RAM的设备上运行此操作。是的,它们会比数组消耗更多内存。我想在您的情况下,使用数组可能是有意义的。显示
createMenu
B的声明TW数组必须在编译时具有已知的大小。
Button*newButtons[size+1];
是非法的(尽管有些编译器将此作为扩展提供)。此外,在运行时无法调整它们的大小。是否有必要使用数组?通常避免使用数组,并使用向量。我从未查看过它们。它们的内存会更大还是更小?我正在一个具有3MB内存的设备上运行此功能