尝试从另一个类对象获取值时出现分段错误

Segmentation fault while trying to get value from another class object

本文关键字:分段 错误 获取 另一个 对象      更新时间:2023-10-16

我创建了几个类来介绍我的问题。当我尝试从指针位于类中的对象获取数据时,我收到segmentation faultStorage错误。该程序保存First类类型的单个指针,该指针可以保存FirstChild类对象地址。FirstChild类继承自First类。

因此,我创建了两种方法来从对象中获取数据。第一个(getNumbers())是返回变量值的虚方法,第二个getNum()调用getNumbers()方法。

segmentation fault错误意味着我正在尝试访问我无法访问的内存。

但是有没有另一种方法来获得这些值?

第一。

#ifndef FIRST_HPP
#define FIRST_HPP
class First {
protected:
int x;
public:
First(int x);
virtual ~First();
virtual int getNumbers();
}
#endif

首先.cpp

#include "First.h"
First::First(int x) : x(x){}
int First::getNumbers(){
return this->x;
}
First::~First(){}

第一个孩子。

#ifndef FIRST_CHILD_HPP
#define FIRST_CHILD_HPP
class FirstChild : public First {
private:
int y;
public:
FirstChild(int x, int y);
virtual int getNumbers();
}
#endif

第一个孩子.cpp

#include "FirstChild.h"
FirstChild::FirstChild(int x, int y) : First(x), y(y){}
int FirstChild::getNumbers() {
return this->x + this->y; 
}

存储.h

#ifndef STORAGE_HPP
#define STORAGE_HPP
#include "First.hpp"
class Storage {
private:
First * somePtr;
int z;
public:
Storage(First * ptr);
int getNum();
}
#endif

存储.cpp

#include "Storage.h"
Storage::Storage(First * ptr) {
this->somePtr = ptr;
}
int Storage::getNum(){
return this->somePtr->getNumbers(); //Segmentation fault (core dumped)
}

主.cpp

#include <iostream>
#include "First.h"
#include "FirstChild.h"
#include "Storage.h"
int main(){
First * firstPtr;
FirstChild FchObject(10);
firstPtr = &FchObject;
Storage storage(firstPtr);
storage.getNum();  //Segmentation fault
return 0;
}

像其他人一样,我不明白这一行是如何编译的,因为 getNum() 应该需要一个实例:

Storage.getNum();  //Segmentation fault

试试这个:

Storage myStorage(firstPtr);
myStorage.getNum();

您的代码无法按原样编译,main() 中有 3 个语法错误:

FirstChild FchObject(10);

因为构造函数的签名是 FirstChild(int x, int y),所以它必须有两个参数,例如

FirstChild  FchObject(5, 10);

类缺少Storage变量的正确声明

firstPtr = &FchObject;
Storage  variable_name(firstPtr);

非静态方法的调用需要在 . 运算符之前有一个类的实例:

variable_name.getNum();