Pululu 发表于 2019-7-8 21:25:24

链表的数据域是一个类对象

语法没有错误,但是控制台显示分配不了内存,不知道是哪的逻辑错误?求大佬解决下

#include "stdafx.h"
#include "iostream"
using namespace std;

class person
{
private:
        string name;
        int age;
        char sex;
public:
        void getname();
        void getage();
        void getsex();
        void putname();
        void putage();
        void putsex();
};

void person::getname()
{
        cin >> this->name;
}

void person::getage()
{
        cin >> this->age;
}

void person::getsex()
{
        cin >> this->sex;
}

void person::putname()
{
        cout << "姓名:" << name <<endl;
}

void person::putage()
{
        cout<<"年龄:" << age << endl;
}

void person::putsex()
{
        cout << "性别" << sex << endl;
}

struct node
{
        person * A;
        struct node * pnext;
};

struct node * creat_list(void)
{
        //创建一个头指针
        struct node * phead;
        struct node * pnext;
        struct node * pnew;

        pnext = phead;
       
        pnext->A = new person;
        pnext->A->getname();
        pnext->A->getage();
        pnext->A->getsex();
        pnext->pnext = NULL;
       
        int num;
        cin >> num;
        for (int i=0;i<num;i++)
        {
        pnew->A = new person;
       
        pnew->A->getname();
        pnew->A->getage();
        pnew->A->getsex();

        pnew->pnext = NULL;
        pnext->pnext = pnew;
        pnext = pnew;
        }
        return phead;

}

int main ()
{
        struct node * phead;
        phead = creat_list();
        return 0;
}

mqcake 发表于 2019-7-9 08:56:57

你的name 是string类型的,不能直接cin输入!

人造人 发表于 2019-7-9 09:15:54

E:\tmp>g++ -g -Wall -o main main.cpp
main.cpp: In function 'int main()':
main.cpp:91:23: warning: variable 'phead' set but not used [-Wunused-but-set-variable]
         struct node * phead;
                     ^~~~~
main.cpp: In function 'node* creat_list()':
main.cpp:63:15: warning: 'phead' is used uninitialized in this function [-Wuninitialized]
         pnext = phead;
         ~~~~~~^~~~~~~
main.cpp:75:17: warning: 'pnew' may be used uninitialized in this function [-Wmaybe-uninitialized]
         pnew->A = new person;
         ~~~~~~~~^~~~~~~~~~~~

E:\tmp>

如果编译器说你有可能错了,那么你很有可能就是错了
不要忽略编译器的警告

lovedai 发表于 2019-7-9 13:38:20

你定义的person类中使用了string类型的数据,而我们知道,string在使用时会自己分配内存,那么,在你使用指针的时候,如果要执行pnext->A = new person; 在这里,你这个类的实例分配的内存大小怎么确定,推荐这里使用数组试试。

Pululu 发表于 2019-7-10 21:36:36

人造人 发表于 2019-7-9 09:15
如果编译器说你有可能错了,那么你很有可能就是错了
不要忽略编译器的警告

这我也看不懂咋错了啊
页: [1]
查看完整版本: 链表的数据域是一个类对象