簡體   English   中英

如何添加到對象數組指針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
}

任何幫助表示贊賞。

在循環中,您引用button [size],這是其邊界的一部分。 您還可以取消引用newButton的成員而無需對其進行初始化。 當您期望按鈕數組時,嘗試將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 menu( std::vector<Button> buttons )
{
    buttons.push_back( Button(25, 19, "Back") );
    return createMenu( buttons );
}

如果確實需要將按鈕按在前面,則有多種選擇(例如,實際上將其按在前面;或者使用雙端隊列代替矢量)。

嘗試這個。 您正在使用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類的對象。 改變它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM