g++ throw me ‘segmentation fault’ while I’m trying to return an object of a classB from a method of a classA. I don’t know how to fix this error, if anybody can tell me why this error happens, I would be grateful. So… here is the code:
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 = include
OBJ = obj
BIN = bin
LIB = lib
CXX = g++
CPPFLAGS = -c -I$(INC)/ -std=c++11
all: $(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
Advertisement
Answer
Cleaned code :
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;
}
compile and execute fine after correcting errors at COMPIL time, which make me wonder : how in hell did you manage to compile this to got segfault ?