Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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++比较陌生,因为我有一门大学课程,所以我已经练习了一个月,我想扩大我的知识,尽可能多地学习,这样我就可以写出好的代码。我们有一个任务,我们应该创建三个类,在第三个类中,我们应该在第二个类中写入和分组对象,然后处理它们,换句话说,我们被要求创建一个名为pilot、plane和fleet的类,它由飞机组成。老师们给出了这个解决方案,这与我的设想相去甚远,看看: class Fleet { private: struct PlaneList { Plane* p; PlaneList* next; PlaneList* node = nullptr , *next_node = nullptr; public: void PlaneAdd(Plane* current) { if (node == nullptr) { node = new PlaneList; node->p = current; node->next = nullptr; next_node = node; } else next_node->next = new PlaneList; next_node = node->next; next_node->p = current; next_node->next = nullptr; } };_C++_List_Class_Pointers_Nullpointerexception - Fatal编程技术网

我可以用什么方法对不同类的对象进行分组? 我对C++比较陌生,因为我有一门大学课程,所以我已经练习了一个月,我想扩大我的知识,尽可能多地学习,这样我就可以写出好的代码。我们有一个任务,我们应该创建三个类,在第三个类中,我们应该在第二个类中写入和分组对象,然后处理它们,换句话说,我们被要求创建一个名为pilot、plane和fleet的类,它由飞机组成。老师们给出了这个解决方案,这与我的设想相去甚远,看看: class Fleet { private: struct PlaneList { Plane* p; PlaneList* next; PlaneList* node = nullptr , *next_node = nullptr; public: void PlaneAdd(Plane* current) { if (node == nullptr) { node = new PlaneList; node->p = current; node->next = nullptr; next_node = node; } else next_node->next = new PlaneList; next_node = node->next; next_node->p = current; next_node->next = nullptr; } };

我可以用什么方法对不同类的对象进行分组? 我对C++比较陌生,因为我有一门大学课程,所以我已经练习了一个月,我想扩大我的知识,尽可能多地学习,这样我就可以写出好的代码。我们有一个任务,我们应该创建三个类,在第三个类中,我们应该在第二个类中写入和分组对象,然后处理它们,换句话说,我们被要求创建一个名为pilot、plane和fleet的类,它由飞机组成。老师们给出了这个解决方案,这与我的设想相去甚远,看看: class Fleet { private: struct PlaneList { Plane* p; PlaneList* next; PlaneList* node = nullptr , *next_node = nullptr; public: void PlaneAdd(Plane* current) { if (node == nullptr) { node = new PlaneList; node->p = current; node->next = nullptr; next_node = node; } else next_node->next = new PlaneList; next_node = node->next; next_node->p = current; next_node->next = nullptr; } };,c++,list,class,pointers,nullpointerexception,C++,List,Class,Pointers,Nullpointerexception,现在据我所知,我们创建了一个列表,其中包含指向另一个类中的共同响应平面的指针?另外,内存分配非常奇怪,我真的不理解它,当我将这段代码粘贴到我的MSVC中时,程序会编译,但它会崩溃,消息是next_node=node->next;是一个空PTR并且它有访问冲突?为什么我会犯这个错误? 我完全糊涂了,如果你能给我解释一下,我将不胜感激。此外,我还了解到,使用列表会对性能造成严重影响,而使用向量之类的工具会更有效。让我们看看您的PlaneAdd函数,并将其重新格式化: void PlaneAdd(Pl

现在据我所知,我们创建了一个列表,其中包含指向另一个类中的共同响应平面的指针?另外,内存分配非常奇怪,我真的不理解它,当我将这段代码粘贴到我的MSVC中时,程序会编译,但它会崩溃,消息是next_node=node->next;是一个空PTR并且它有访问冲突?为什么我会犯这个错误?
我完全糊涂了,如果你能给我解释一下,我将不胜感激。此外,我还了解到,使用列表会对性能造成严重影响,而使用向量之类的工具会更有效。

让我们看看您的
PlaneAdd
函数,并将其重新格式化:

void PlaneAdd(Plane* current) {
    if (node == nullptr) {
        node = new PlaneList;
        node->p = current;
        node->next = nullptr;
        next_node = node;
    }
    else {
        next_node->next = new PlaneList;
    } 

    next_node = node->next;
    next_node->p = current;
    next_node->next = nullptr;
}
现在我们可以很容易地看到,最后三条语句不是
else
的一部分


因此,当执行这些语句时,
node==nullptr
true
时,
node->next
将是一个空指针。您要做的第一件事是
next\u node=node->next
,这将
next\u node
也变成一个空指针。这意味着下一条语句将取消对空指针的引用,并导致未定义的行为和可能的崩溃。

您可能不希望将飞行员和飞机合并到一个列表中。它们太不同了,聚合没有任何意义。如果您可能有不同类型的平面,您可能希望为平面派生一个
平面
基类。建议:将震源组逻辑与链表逻辑分开。如果您有一个包含链表的震源组,您可以在不受震源组内容影响的情况下测试链表,完成后,您将拥有一个链表,可以在以后的其他作业中重复使用。一般来说,类的职责越少,测试和维护就越容易。如果您有许多小程序块,每个都做一件简单的事情,那么您可以快速、轻松地测试它们,然后将它们组装成更大的程序,比编写一个单片程序要简单得多。