基类构造函数的分段错误

时间:2016-09-29 17:27:12

标签: c++ inheritance constructor segmentation-fault

为什么在创建Rectangle对象时会产生分段错误?我认为我的构造函数有些不正确,但我没有足够的C ++经验来识别它。

#include <string>
#include <map>

using namespace std;

class Shape {
private:
    string name;
    string property_name;
    map<string,double> parameters;


public:
    Shape(){
    }

    void set_name(string n){
        name=n;
    }

    string set_property_name(string s){
        property_name=s;
    }

    void set_parameter(string p, double n){
        parameters[p]=n;
    }

    double get_parameter(string p) {
        return parameters[p];
    }

    virtual double get_property() = 0;

};

class Shape2D: public Shape {
public:
    Shape2D() {
        set_property_name("area");
    }
};

class Rectangle: public Shape2D {
public:
    Rectangle() {
        set_name("rectangle");
        set_parameter("length",0);
        set_parameter("base",0);
    }

    double get_property() {
        return get_parameter("length") *   get_parameter("base");
    }
};


int main() {
  Shape * user_shape;
  user_shape=new Rectangle();
  return 0;
}

1 个答案:

答案 0 :(得分:4)

因为您的string set_property_name(string s)没有return且未定义的行为