c++ - 基类构造函数的段错误

标签 c++ inheritance constructor segmentation-fault

为什么创建矩形对象时会产生段错误?我认为我的构造函数有些地方不正确,但我没有足够的 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;
}

最佳答案

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

关于c++ - 基类构造函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39776522/

相关文章:

c++ - 为什么 ICC 以这种方式展开这个循环并使用 lea 进行算术运算?

xml - Odoo:字段上的条件不可见属性仅在一个方向上有效?

vb.net - 尝试在 VB.NET 中调用重载构造函数时出现编译器错误

c++ - 编译器在乘以子类型时选择了错误的运算符*

C++返回命令输入函数

c++ - 使用struct和point来输入和输出信息

java - Java 中的构造函数本质上是静态的还是非静态的?

javascript - new F 和 new F() 有什么不同吗?

C++编译QT报错

C++,构造函数的原因