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

C++ 尝试从方法返回指向对象的指针时出现分段错误,c++,linux,pointers,segmentation-fault,g++,C++,Linux,Pointers,Segmentation Fault,G++,当我试图从classA的方法返回classB的对象时,g++抛出“分段错误”。我不知道如何修复这个错误,如果有人能告诉我为什么会发生这个错误,我将不胜感激。 所以代码如下: A.h级 classA.cpp B.h类 类别b.cpp $(OBJ)/main.o:$(SRC)/main.cpp $(OBJ)/classA.o:$(SRC)/classA.cpp$(INC)/classA.h$(INC)/classB.h $(OBJ)/classB.o:$(SRC)/classB.cpp$(INC)/

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

A.h级

classA.cpp

B.h类

类别b.cpp

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

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

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

$(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;
}
A类;
B类;
B类{
私人:
int n;
公众:
类别b();
内联无效集(intn){this->n=n;}
内联int get_n(){返回此->n;}
};
甲级{
私人:
B类*ptr_B类;
公众:
类别a();
内联类B getClassBobObject(){return*ptr_ClassB;}
};
ClassB::ClassB(){
这->n=0;
}
ClassA::ClassA(){
ptr_classb=新的classb();
}
#包括
int main(){
ClassA*ptr_ClassA=新的ClassA();

std::cout getClassBObject()。get#n()表示代码无法编译,更不用说运行和崩溃了。请发布您确定的代码,这些代码实际上表现出问题行为。不要从内存中重新键入,使用复制和粘贴。不要
#包含
.cpp文件。内联ClassB getClassBObject(return&ptr\u ClassB;)-->您正在返回ClassB类型指针的地址。实际上,您应该只返回ClassB*。像这样,内联ClassB getClassB对象(返回this->ptr_ClassB;)将
内联ClassB getClassB(){return this->ptr_ClassB;}
替换为
内联ClassB getClassB(){return return*(this->ptr_ClassB)}
@Guiroux仍然使用你的代码不,使用我的代码是,但是如果我上传我的文件,它的代码是相同的xD,你会看到它们吗?你是什么意思?上传到哪里?我会把它们放在这里。这并不能回答问题。@black0ltz没有使用你显示的代码。这甚至不会编译。
#include "classA.h"
#include "classB.h"

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

class ClassB{
private:
    std::string name;
public:
    ClassB();
    inline std::string getName(){return this->name;}
};
#endif
#include <string>
#include "classB.h"

ClassB::ClassB(){
    this->name = "default";
}
#include <iostream>
#include "classA.h"

using namespace std;

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

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

    return 0;
}
$(CXX) -o $(BIN)/main $(OBJ)/main.o -Llib/ -lclasses
$(CXX) $(CPPFLAGS) $(SRC)/main.cpp -o $(OBJ)/main.o
$(CXX) $(CPPFLAGS) $(SRC)/classA.cpp -o $(OBJ)/classA.o
$(CXX) $(CPPFLAGS) $(SRC)/classB.cpp -o $(OBJ)/classB.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;
}