我创建了几个类来介绍我的问题。当我尝试从指针位于segmentation fault
类的对象中获取数据时,我收到Storage
错误。该程序保存First
类类型的单个指针,它可以保存FirstChild
类对象地址。 FirstChild
类继承自First
类。
所以,我创建了两个方法来从对象中获取数据。第一个(getNumbers()
)是返回变量值的虚方法,第二个getNum()
正在调用getNumbers()
方法。
segmentation fault
错误意味着我正在尝试访问我没有访问权限的内存。
但是还有其他方法来获得这些价值观吗?
First.h
#ifndef FIRST_HPP
#define FIRST_HPP
class First {
protected:
int x;
public:
First(int x);
virtual ~First();
virtual int getNumbers();
}
#endif
First.cpp
#include "First.h"
First::First(int x) : x(x){}
int First::getNumbers(){
return this->x;
}
First::~First(){}
FirstChild.h
#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
FirstChild.cpp
#include "FirstChild.h"
FirstChild::FirstChild(int x, int y) : First(x), y(y){}
int FirstChild::getNumbers() {
return this->x + this->y;
}
storage.h定义
#ifndef STORAGE_HPP
#define STORAGE_HPP
#include "First.hpp"
class Storage {
private:
First * somePtr;
int z;
public:
Storage(First * ptr);
int getNum();
}
#endif
Storage.cpp
#include "Storage.h"
Storage::Storage(First * ptr) {
this->somePtr = ptr;
}
int Storage::getNum(){
return this->somePtr->getNumbers(); //Segmentation fault (core dumped)
}
的main.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;
}
答案 0 :(得分:2)
和其他人一样,我不明白这行是如何编译的,因为getNum()in应该需要一个实例:
Storage.getNum(); //Segmentation fault
试试这个:
Storage myStorage(firstPtr);
myStorage.getNum();
答案 1 :(得分:0)
您的代码无法按原样编译,main()中的3个语法错误:
FirstChild FchObject(10);
因为构造函数的签名是FirstChild(int x,int y),所以它必须有两个参数,例如
FirstChild FchObject(5, 10);
Storage
类
firstPtr = &FchObject;
Storage variable_name(firstPtr);
非静态方法的调用需要之前的类实例。操作者:
variable_name.getNum();