尝试从另一个类对象获取值时出现分段错误
Segmentation fault while trying to get value from another class object
我创建了几个类来介绍我的问题。当我尝试从指针位于类中的对象获取数据时,我收到segmentation fault
Storage
错误。该程序保存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();
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?