Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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++ 双指针不';使用new时不要调用对象构造函数_C++ - Fatal编程技术网

C++ 双指针不';使用new时不要调用对象构造函数

C++ 双指针不';使用new时不要调用对象构造函数,c++,C++,我的问题似乎只有一点答案。我正在尝试动态分配一个二维链表。当我试图使用类llist构造函数将head和tail指针设置为NULL时遇到的问题: //I've included only the parts that I see are neccesary struct node { int value ; int weight ; node* next ; } ; class llist{ private : node* tail,

我的问题似乎只有一点答案。我正在尝试动态分配一个二维链表。当我试图使用类llist构造函数将head和tail指针设置为NULL时遇到的问题:

//I've included only the parts that I see are neccesary
 struct node {
    int value ;
    int weight ;
    node* next ;
 } ;
 class  llist{
      private :
          node* tail, *head ;
      public :
           llist(){tail = NULL ;  head = NULL ;} /* this unneccesary retype is to make sure 
                                                    that it wasn't a typo*/
}
class list_graph
{
    private :
        int size, s;
        llist ** v ;
    public :
        list_graph(int s){
             this -> s = s ;
             size = 0 ;
        v = new llist* [s] ; 
        }
}
我使用了调试器并完成了每个步骤,在我创建了一个
list\u graph
类型的对象之后,似乎没有调用我的
llist
构造函数,因此依赖于此的所有其他函数都会失败,并给我带来分段错误。除了使用STL列表,还有什么我做错了的吗?或者有什么解决办法吗?非常感谢

  v = new llist* [s] ; 
创建指向类型
llist
的指针数组,但它不创建任何
llist
对象。如果您想要一系列这样的东西,那么您需要:

  llist * v ;  
以及:

或者更好,如果这不是家庭作业,使用std::vector。不要把像
llist**v
这样的东西看作是“双指针”;把它们看作是什么——指向指针的指针。

这是:

  v = new llist* [s] ; 
创建指向类型
llist
的指针数组,但它不创建任何
llist
对象。如果您想要一系列这样的东西,那么您需要:

  llist * v ;  
以及:


或者更好,如果这不是家庭作业,使用std::vector。不要把像
llist**v
这样的东西看作是“双指针”;把它们看作是指向指针的指针。

如果你想把
v
作为指向
llist
对象的指针数组,而不是
llist
对象数组(Neil Butterworth建议),通过将
列表图
构造函数改为

  list_graph(int s) : size(0), s(s), v(new llist* [s]) {
    for (int i(0); i < s; ++i)
      v[i] = new llist();
  }

如果要将
v
作为指向
llist
对象的指针数组,而不是
llist
对象数组(Neil Butterworth建议),请通过将
列表图
构造函数更改为

  list_graph(int s) : size(0), s(s), v(new llist* [s]) {
    for (int i(0); i < s; ++i)
      v[i] = new llist();
  }

如果要分配2D指针数组,可以通过以下几种方式进行分配:

使用指针数组的动态数组,给定一些
宽度
高度

llist** data = new llist*[width];
for (int i = 0; i < width; ++i){
    data[i] = new llist[height]; // constructors get called here
}

// accessing a linked list, make sure x is in [0, width) and y is in [0, height):
data[x][y]->value;

如果要分配2D指针数组,可以通过以下几种方式进行分配:

使用指针数组的动态数组,给定一些
宽度
高度

llist** data = new llist*[width];
for (int i = 0; i < width; ++i){
    data[i] = new llist[height]; // constructors get called here
}

// accessing a linked list, make sure x is in [0, width) and y is in [0, height):
data[x][y]->value;


为什么要调用
llist
构造函数?您没有创建任何
llist
对象,而是创建
llist*
对象。
v=new-llist*[s]
动态分配指针数组。类型为
llist*
的指针与
llist
的指针不同。如果希望调用
llist
的构造函数,则需要构造一个或多个
llist
而不是指向它们的指针,似乎您正在尝试创建链接列表的二维数组?还不完全清楚。但是在任何情况下,创建2d数组的过程都是相同的,无论是链表的2d数组还是整数的2d数组,建议您通过谷歌搜索如何分配2d数组。我已经解释过,我正在尝试创建2d链表。谷歌也帮不上忙,因为我正试着给构造器打电话,但我不知道什么是2d链表,也不知道它与你的代码有什么关系。你的意思是链表的一维数组吗?为什么要调用
llist
构造函数?您没有创建任何
llist
对象,而是创建
llist*
对象。
v=new-llist*[s]
动态分配指针数组。类型为
llist*
的指针与
llist
的指针不同。如果希望调用
llist
的构造函数,则需要构造一个或多个
llist
而不是指向它们的指针,似乎您正在尝试创建链接列表的二维数组?还不完全清楚。但是在任何情况下,创建2d数组的过程都是相同的,无论是链表的2d数组还是整数的2d数组,建议您通过谷歌搜索如何分配2d数组。我已经解释过,我正在尝试创建2d链表。谷歌也帮不上忙,因为我正试着给构造器打电话,但我不知道什么是2d链表,也不知道它与你的代码有什么关系。你是说一个一维链表数组吗?这就是问题所在,我试图避免向量,所以我遇到了这种情况,这有点违背了我创建二维链表的目的,你为什么要创建一个?你打算用它做什么?我在用它做我的图形类文件,我想能够指定大小,所以发生了这种情况为什么你不能用std::list或std::vector来做呢?这就是问题所在,我试图避免向量,所以我遇到了这种情况,这有点违背了我创建2d链表的目的,为什么你要创建一个?你打算用它做什么?我在用它做我的图形类文件,我想能够指定大小,所以发生了这种情况为什么不能用std::list或std::vector来做呢?有没有不涉及循环的方法?这会让我失去我的宝贝runtime@Trai:您可以在一个连续的数组中一次性初始化它们,但这意味着您不能单独删除它们。这样可以吗?不可以,但是我已经找到了我的bug,谢谢你的帮助。不管怎样,我在那里做这件事,不涉及循环?这会让我失去我的宝贝runtime@Trai:您可以在一个连续的数组中一次性初始化它们,但这意味着您不能单独删除它们。这样可以吗?不可以,但是我已经找到了我的bug,无论如何谢谢你的帮助