我正在制作几个项目,需要将它们设置为可以互相交互。
Item i1 = Item("Item 1");
Item i2 = Item("Item 2");
Item i3 = Item("Item 3");
Item i4 = Item("Item 4");
i1.setInteractable({i2,i3});
i2.setInteractable({i1,i4});
i3.setInteractable({i1});
这是Item中setInteractable方法的方法标题。
void setInteractable(Item i[]);
可互动项目存储如下:
static Item interactableItems[25];
这不起作用,错误发生在第一个大括号之后。在C ++中执行此操作的正确方法是什么?
答案 0 :(得分:3)
您不希望在数组中存储对象(否则,它们被复制),但是对对象的引用。
更改您的存储和界面:
void setInteractable(Item& i[]);
static Item& interactableItems[25];
我建议在谷歌寻找:
答案 1 :(得分:1)
C ++不像您尝试的那样轻松制作动态列表。
要制作动态列表,首先需要声明动态列表:
Item * dlist = new Item[2];
设置它们:
dlist[0] = i1;
dlist[1] = i2;
然后将它们传递给你的函数:
setInteractable(dlist);
最后你必须记住清理你的记忆:
delete [] dlist;
或者......您使用标准模板库执行此操作。
std::vector<Item> temp1;
temp1.push_back(i1);
//... other sets
你的功能应该是:
void setInteractable(std::vector<Item> & list)
{
///
}
电话应该是
setInteractable(temp1);
答案 2 :(得分:0)
我会像这样解决问题:
将方法更改为一次处理一个对象,并循环遍历它们:
void setInteractable(Item &i);
for (int i = 0; i < 25; i++)
for (int j = i + 1; j < 25; j++)
items[i].setInteractable(items[j]);
要处理的更干净。您可以将它们存储在Item内部的std :: vector中,并将它们存储在那里。
答案 3 :(得分:0)
传递数组初始化是错误的C ++语法:
i1.setInteractable({i2,i3}); // error: invalid
您可以通过各种方式实现这一目标。最直接的方法是使用std::vector
。
首先将interactableItems
声明为
static vector<Item> interactableItems;
现在你不需要setInteractable()
,如果你在变量public
之上
用法:
i1.interactableItems.push_back(Item("Item 2"));
i1.interactableItems.push_back(Item("Item 3"));
如果你想要变量private
,那么你可以放一个包装器并将push_back
放在其中。
答案 4 :(得分:0)
我建议使用其中一个STL容器。我的实施将如此进行:
// setInteractable方法的方法标题
#include <vector>
class Item {
private:
// some declarations
public:
void setInteractable(vector<Item &>);
// some other declarations
};
您的实现应该选择性地将Item
个对象推送到向量上,然后再将它们传递给函数。
有关STL容器的更多信息,请参阅Cplusplus Reference Site。