C++ C++;使用其他类的类

C++ C++;使用其他类的类,c++,class,pointers,C++,Class,Pointers,我试图将节点定义到NodeList类中,并存储它 我试过的是: 在Try()函数中,我定义了一个节点,如node*node=malloc…这很好。但是如果我使用我在类中定义的节点,比如node=malloc…这一行给出运行时错误。我不明白这两者有什么区别 以下是课程: Node.hpp #ifndef NODE_HPP #define NODE_HPP class Node{ public: int data; }; #endif Node.cpp #include <ios

我试图将节点定义到NodeList类中,并存储它

我试过的是:

在Try()函数中,我定义了一个节点,如
node*node=malloc…
这很好。但是如果我使用我在类中定义的节点,比如
node=malloc…
这一行给出运行时错误。我不明白这两者有什么区别

以下是课程:

Node.hpp

#ifndef NODE_HPP
#define NODE_HPP

class Node{
public:
    int data;
};

#endif
Node.cpp

#include <iostream>
#include "Node.hpp"

using namespace std;
节点列表

#include <iostream>
#include "NodeList.hpp"
#include "Node.hpp"

using namespace std;

void NodeList::Try(){
    //This works (doesn't give error):
    //Node *node = (Node*)malloc(sizeof(Node));

    //But I use the node I defined in class here and this line gives runtime error:
    node = (Node*)malloc(sizeof(Node));
}
#包括
#包括“NodeList.hpp”
#包括“Node.hpp”
使用名称空间std;
void节点列表::Try(){
//这是有效的(不会给出错误):
//Node*Node=(Node*)malloc(sizeof(Node));
//但是我在这里使用我在类中定义的节点,这一行给出了运行时错误:
node=(node*)malloc(sizeof(node));
}
Main.cpp

#include <iostream>
#include "NodeList.hpp"

using namespace std;

int main()
{
    NodeList *node = NULL;
    node->Try();
    system("PAUSE");
    return 0;
}
#包括
#包括“NodeList.hpp”
使用名称空间std;
int main()
{
NodeList*node=NULL;
node->Try();
系统(“暂停”);
返回0;
}

您的代码有很多问题:

  • Main.cpp
    中,您正在取消对空指针的引用:
    node->DosyaOku(),但节点为空。这是一种未定义的行为
  • NodeList.cpp中也有同样的问题
  • 您正在
    节点.cpp中使用
    malloc
    ,您可能需要使用
    新的
    (读取),并且您应该考虑如何
    释放
    /
    删除该指针
  • 节点中的
    创建

  • 它给出了目标失败的错误配方。它应该给出比这更详细的错误消息。
    node=(node*)malloc(sizeof(node))注意malloc没有调用构造函数。据我所知,OP通过从null调用Create来调用UBpointer@drescherjm没关系。我现在在构造函数中没有任何代码。关于在
    c++
    程序中使用malloc:谢谢你的回答。在main.cpp中,它运行良好。但是在
    Try()
    函数中,我使用了我在类中定义的节点,但它不起作用。我不理解这两者之间的区别。您在NodeList.cpp中有相同的问题,这会产生错误。但是在
    main.cpp
    中,它不是。这两种情况下都是未定义的行为。如果main.cpp中的“它似乎可以工作”,这并不意味着它是正确的,并且不会使您添加的下一行崩溃。不幸的是,有时由于未定义的行为,中断的代码似乎可以工作。当我之前查看此代码时,我没有考虑要创建的传递节点*。您对第4点的看法是正确的,即如果您传递值,则不使用该值,并立即将其设置为其他值,这是没有意义的。
    #include <iostream>
    #include "NodeList.hpp"
    
    using namespace std;
    
    int main()
    {
        NodeList *node = NULL;
        node->Try();
        system("PAUSE");
        return 0;
    }