gpt4 book ai didi

c++ - 从 matlab 调用类时出现段错误

转载 作者:行者123 更新时间:2023-11-30 05:13:42 25 4
gpt4 key购买 nike

我遇到以下代码的段错误,我真的不知道这里发生了什么。好像跟Master-class里面的指针有关系,但是不知道怎么解决。我有以下代码:

class Shape
{
public:
Shape(){}
~Shape(){}

virtual void draw() = 0;
};

class Circle : public Shape
{
public:
Circle(){}
~Circle(){}

void draw()
{
printf("circle");
// code for drawing circle
}
};

class Line : public Shape
{
public:
Line() {}
~Line() {}

void draw()
{
printf("line");
// code for drawing line
}
};

class Master
{
public:
Shape* member_shape;

public:
Master()
{}
~Master()
{}

void add_shape_circle()
{
member_shape = new Circle();
}

void add_shape_line()
{
member_shape = new Line();
}
};

Master* master_object;

你知道如何让这段代码工作吗?谢谢。

编辑(添加主要功能):

实际上我的代码中不存在像下面这样的主函数,因为我在 MATLAB c-mex 函数中使用代码。但它应该看起来像这样:

//... classes from above here
int main()
{
master_object = new Master();
master_object->add_shape_circle();
master_object->member_shape->draw(); // segmentation error here

return 0;
}
  1. 编辑

如果我在 Master 构造函数中直接实例化 Circle 对象,则不会发生错误。但是这样就无法在 LineCircle 之间进行选择了。示例:如果我将 Master 类更改为以下内容,则函数调用 master_object->member_shape->draw() 不会导致错误。

class Master
{
public:
Shape* member_shape;

public:
Master()
{
member_shape = new Circle();
}
~Master()
{}

void add_shape_circle(){}

void add_shape_line(){}
};

所以,这个未初始化的指针有问题……我想。

最佳答案

问题可能与您使用 printf 有关。来自 https://www.mathworks.com/help/matlab/matlab_external/creating-c-mex-files.html?requestedDomain=www.mathworks.com :

Using cout or the C-language printf function does not work as expected in C++ MEX files. Use the mexPrintf function instead.

关于c++ - 从 matlab 调用类时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43814826/

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