【发布时间】:2022-01-02 22:07:28
【问题描述】:
想知道是否有人可以帮助我,我的代码中有这个结构
struct Gate {
int output[9];
};
我有一个该结构的向量,但是推送到通常会创建副本的向量会中断,因为它只是一个浅拷贝,而且我的结构有一个数组 所以我尝试通过创建自定义复制构造函数来解决这个问题。
struct Gate {
int output[9];
Gate(const Gate &old){
copy(old.output, old.output + 9, output);
}
};
但现在我的初始化程序不再工作了,因为他们正在尝试使用这个复制构造函数
Gate alwaysFirst{{0,0,0,1,1,1,2,2,2}};
Gate alwaysSecond{{0,1,2,0,1,2,0,1,2}};
universal_gate_finder.cpp:39:41: error: cannot convert '<brace-enclosed initializer list>' to 'const Gate&'
39 | Gate alwaysFirst{{0,0,0,1,1,1,2,2,2}};
|
有人知道解决这个问题的方法吗?
【问题讨论】:
-
我相信这种类型的对象可以正确复制,而不需要显式的复制构造函数。究竟是什么让你相信事实并非如此?
-
"推送到通常会创建副本的向量会损坏,因为它只是一个浅副本" -
struct还需要什么?默认的复制构造函数会复制output就好了。 -
这里是代码:pastebin.com/1PWdJSG4 我在第 53 行创建 Gate 对象,并将它们复制到第 62 和 67 行的向量中。我在第 58 行检查以确保没有出于任何原因,数组值大于 2。在第 55 行我检查它是否仍然小于 2,我得到的错误是在第 55 行,这意味着在我将它们复制到向量后值正在发生变化。
-
请在此处提供minimal reproducible example。
-
除非我做错了什么(可能在第 49 行和第 57 行之间,我认为该错误与内存有关。