gpt4 book ai didi

c++ - 如果我在另一个类中使用一个类的对象,我可以使用指向第一类对象的指针来指向它的成员吗?

转载 作者:行者123 更新时间:2023-11-28 02:41:33 29 4
gpt4 key购买 nike

这是我使用的代码:gdb 在启动构造函数后立即显示段错误。我可能做错了什么?

class Employee
{
public:
string name;
int height;
int level;
Employee* iboss;
Employee* parent;
Employee* left_child;
Employee* right_child;
vector<Employee*> junior;
};

class Company
{
private:
Employee* root;
Employee* rootAVL;

public:
Company(void)
{
root->junior[0]=NULL;
root->level=0;
root->iboss=NULL;
root->height=0;
root->left_child=NULL;
root->right_child=NULL;
root->parent=NULL;
rootAVL=root;
}

Employee* search(string A, Employee* guy,int c);
void AddEmployee(string A,string B);
void DeleteEmployee(string A,string B);
void LowestCommonBoss(string A,string B);
void PrintEmployees();
void insertAVL(Employee* compare,Employee* guy,int c);
void deleteAVL(Employee* guy);

void GetName(string A)
{
root->name=A;
cout<<A;
}
};

int main()
{
cout<<"hello world";
Company C;
//so the problem seems to be that there's a segmentation fault every time i try to access root or try to point to it's methods.
cout<<"hello world";
string f;
cin>>f;
C.GetName(f);
C.PrintEmployees();
}

每当我尝试使用 root->junior[0]=NULL 或任何类似的东西时,它都会给我一个段错误。

可能是什么问题?

最佳答案

在类 Compnay 中你有:

Employee* root;

Company 构造函数中,您可以:

root->junior[0]=NULL;

但是您没有构造Employee 的任何实例,因此root 指针无效。因此,您只是尝试使用上述 root->junior... 行访问无效内存。

首先考虑创建一个Employee

另请注意,如果您执行 root->junior[0]=...,那么 Employeestd::vector junior 数据成员应创建为包含至少一项的 vector (索引为 0 的项,您正在尝试访问)。

最后,考虑在 C++11/14 代码中使用 nullptr 代替 NULL

关于c++ - 如果我在另一个类中使用一个类的对象,我可以使用指向第一类对象的指针来指向它的成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25806151/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com