[英]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.