gpt4 book ai didi

c++ - 尝试从方法返回指向对象的指针时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:28 24 4
gpt4 key购买 nike

当我尝试从 A 类的方法返回 B 类的对象时,g++ 向我抛出“段错误”。我不知道如何修复这个错误,如果有人能告诉我为什么会发生这个错误,我将不胜感激。所以...这是代码:

classA.h

#include "classB.h"
#ifndef _CLASS_A_H_
#define _CLASS_A_H_
class ClassA{
private:
int id;
ClassB *ptr_classB;
public:
ClassA();
ClassA(int id, std::string name);

inline void setID(int id){this->id = id;}

inline int getID(){return this->id;}

inline ClassB getClassB(){return this->ptr_classB;}

};

#endif

classA.cpp

#include "classA.h"
#include "classB.h"

ClassA::ClassA(){
this->id = 0;
ptr_classB = new ClassB();
}

classB.h

#ifndef _CLASS_B_H
#define _CLASS_B_H

class ClassB{
private:
std::string name;
public:
ClassB();
inline std::string getName(){return this->name;}
};
#endif

classB.cpp

#include <string>
#include "classB.h"

ClassB::ClassB(){
this->name = "default";
}

main.cpp

#include <iostream>
#include "classA.h"

using namespace std;

int main(){
ClassA *ptr_classA = new ClassA();

cout << ptr_classA->getClassB().getName() << endl;
//asd

return 0;
}

Makefile

SRC=src

INC=包括

OBJ = 对象

BIN = 垃圾箱

LIB = 库

CXX = g++

CPPFLAGS = -c -I$(INC)/-std=c++11

全部:$(BIN)/main

$(BIN)/main: $(OBJ)/main.o

$(CXX) -o $(BIN)/main $(OBJ)/main.o -Llib/ -lclasses

$(OBJ)/main.o: $(SRC)/main.cpp

$(CXX) $(CPPFLAGS) $(SRC)/main.cpp -o $(OBJ)/main.o

$(OBJ)/classA.o: $(SRC)/classA.cpp $(INC)/classA.h $(INC)/classB.h

$(CXX) $(CPPFLAGS) $(SRC)/classA.cpp -o $(OBJ)/classA.o

$(OBJ)/classB.o: $(SRC)/classB.cpp $(INC)/classB.h

$(CXX) $(CPPFLAGS) $(SRC)/classB.cpp -o $(OBJ)/classB.o

$(LIB)/libclasses.a: $(OBJ)/classA.o

ar rsv $(LIB)/libclasses.a $(OBJ)/classA.o 

最佳答案

清理后的代码:

class ClassA ;
class ClassB ;

class ClassB{
private:
int n;
public:
ClassB();
inline void set_n(int n){this->n =n;}
inline int get_n(){return this->n;}

};

class ClassA{
private:
ClassB *ptr_classb;
public:
ClassA();
inline ClassB getClassBObject(){return *ptr_classb;}
};

ClassB::ClassB(){
this->n = 0;
}

ClassA::ClassA(){
ptr_classb = new ClassB();
}

#include <iostream>

int main(){
ClassA *ptr_classA = new ClassA();

std::cout << ptr_classA->getClassBObject().get_n() << std::endl;

return 0;
}

在编译时纠正错误后编译并执行得很好,这让我想知道:你到底是如何设法编译这个以获得段错误的?

关于c++ - 尝试从方法返回指向对象的指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37655828/

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