Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构造函数的初始化列表_C++_C++11_Initialization_Initialization List - Fatal编程技术网

C++ 构造函数的初始化列表

C++ 构造函数的初始化列表,c++,c++11,initialization,initialization-list,C++,C++11,Initialization,Initialization List,我正在学校做一个作业,我们应该为自己的List类创建一个构造函数,该类将初始化列表作为参数 这就是我希望能够做到的: List ourList {1, 2, 3}; 这就是我到目前为止所做的: List::List(std::initializer_list<int> il) { head_ = copy(il.begin(), il.end()); } List_Node* List::copy(std::initializer_list<int>::itera

我正在学校做一个作业,我们应该为自己的List类创建一个构造函数,该类将初始化列表作为参数

这就是我希望能够做到的:

List ourList {1, 2, 3};
这就是我到目前为止所做的:

List::List(std::initializer_list<int> il)
{
  head_ = copy(il.begin(), il.end());
}

List_Node* List::copy(std::initializer_list<int>::iterator begin,
                      std::initializer_list<int>::iterator end)
{
  if(begin == end)
    return nullptr;

  List_Node* new_list = new List_Node(*begin);

  List_Node* node = copy(begin++, end);
  new_list->next_ = node;
  return new_list;
}
List::List(std::initializer\u List-il)
{
头=复制(il.begin(),il.end());
}
列表\节点*列表::复制(标准::初始值设定项\列表::迭代器开始,
std::初始值设定项(列表::迭代器结束)
{
如果(开始==结束)
返回空ptr;
列表节点*新建列表=新建列表节点(*开始);
List_Node*Node=copy(开始++,结束);
新建\列表->下一个\节点;
返回新的_列表;
}
依我拙见,这应该很有效。但是,当我尝试初始化(
List{1,2,3};
)时,我得到一个seg错误。有人能解释一下我做错了什么吗

List_Node* node = copy(begin++, end);
这将使用相同的参数再次调用
copy
,永远递归,永远不会完成

您应该能够通过使用调试器查看崩溃的位置来判断这一点,并且您会看到有数百个对
List::copy
的调用,而不是您预期的三个调用

您想要的是
++begin
而不是
begin++

这将使用相同的参数再次调用
copy
,永远递归,永远不会完成

您应该能够通过使用调试器查看崩溃的位置来判断这一点,并且您会看到有数百个对
List::copy
的调用,而不是您预期的三个调用


你想要
++begin
而不是
begin++

你不断地重复复制同一个元素,你想要
++begin
而不是
begin++
为什么要对顺序任务使用重复?这只会使错误更难发现。如果您不断重复复制同一元素,您希望
++begin
而不是
begin++
为什么对连续任务使用重复?我想你可以解释一下
op++
++op
之间的区别,让op变得更聪明一些。在我看来那太好了。@luk32谢谢,但我知道op++和++op是如何工作的。这一次只是我的一个小屁=/我想你可以解释一下
op++
++op
之间的区别,让op变得更聪明一些。在我看来那太好了。@luk32谢谢,但我知道op++和++op是如何工作的。这次只是我的一个屁=/