需要创建一个已经创建的对象数组
Need to make an array of already created objects
我正在制作几个项目,需要将它们设置为相互交互
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中setinteracttable方法的方法头。
void setInteractable(Item i[]);
可交互项的存储方式如下:
static Item interactableItems[25];
这不起作用,错误发生在第一个花括号之后。在c++中正确的方法是什么?
你不希望在数组中存储对象(否则,它们会被复制),而是存储对对象的引用。
改变你的存储和接口:
void setInteractable(Item& i[]);
static Item& interactableItems[25];
我建议在谷歌上搜索:
- 拷贝构造函数
- 指针vs对象vs引用
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);
像这样传递数组初始化是错误的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
放在里面。
我会这样解决这个问题:
将方法更改为每次只处理一个对象,并循环遍历它们:
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中,并且只使用那些。
我建议使用STL容器之一。我的实现将这样进行:
//setinteracttable方法的方法头
#include <vector>
class Item {
private:
// some declarations
public:
void setInteractable(vector<Item &>);
// some other declarations
};
你的实现应该让它们选择性地在将Item
对象传递给函数之前将它们推入向量。
请参阅Cplusplus参考网站获取有关STL容器的更多信息。
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- 只在堆中创建C++对象
- 创建用户定义的复制构造函数时无法创建对象