Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未处理的异常,正在传递对象?_C++_Class_Pointers_Dynamic - Fatal编程技术网

C++ 未处理的异常,正在传递对象?

C++ 未处理的异常,正在传递对象?,c++,class,pointers,dynamic,C++,Class,Pointers,Dynamic,及 这两个都是类。 首先,我使用复制构造函数将类分数的分子设置为4,分母设置为1 然后我想把它(4,1)传递到我的类循环中,但是我通过调试器得到了这个未处理异常的错误,在下面的构造函数中,你没有给radius赋值 Fraction* fPtr = new Fraction(4, 1); Circle* cPtrA = new Circle(*fPtr); 有不同的选项,但如果您想在圆圈中复制分数,可以执行以下操作: Circle::Circle(Fraction& arg1) {

这两个都是类。 首先,我使用复制构造函数将类分数的分子设置为4,分母设置为1


然后我想把它(4,1)传递到我的类循环中,但是我通过调试器得到了这个未处理异常的错误,在下面的构造函数中,你没有给radius赋值

 Fraction* fPtr = new Fraction(4, 1);
 Circle* cPtrA = new Circle(*fPtr);
有不同的选项,但如果您想在
圆圈中复制
分数
,可以执行以下操作:

Circle::Circle(Fraction& arg1) {
    radius->setNum(arg1.getNum());
    radius->setDenom(arg1.getDenom());
}
也许只存储对象的副本会更好

Circle::Circle(Fraction& arg1) : radius(new Fraction(arg1)) {
}

请注意,通过将参数设为
const
引用,您可以向编译器和其他用户表明传递的
分数不会被调用更改。

在下面的构造函数中,您没有为
radius
分配任何内容

 Fraction* fPtr = new Fraction(4, 1);
 Circle* cPtrA = new Circle(*fPtr);
有不同的选项,但如果您想在
圆圈中复制
分数
,可以执行以下操作:

Circle::Circle(Fraction& arg1) {
    radius->setNum(arg1.getNum());
    radius->setDenom(arg1.getDenom());
}
也许只存储对象的副本会更好

Circle::Circle(Fraction& arg1) : radius(new Fraction(arg1)) {
}

请注意,通过将参数设为
const
引用,您可以向编译器和其他用户表明传递的
分数不会被调用更改。

您忘记了在复制构造函数和默认构造函数中初始化
radius
。这会在尝试调用
setNum
setDenom
时导致异常。您可以通过为
radius
分配
分数来解决此问题,如下所示

class Circle {
public:
    Circle();
    Circle(const Fraction& arg1);
   ~Circle();
    void print(void);
protected:
    Fraction radius;
};

Circle::Circle(const Fraction& arg1) : radius(arg1)) {
}
惯用的做法是通过复制构造初始化
radius

Circle::Circle() : radius(new Fraction())
{
    radius->setNum(1);
    radius->setDenom(1);
}

Circle::Circle(const Fraction &other) : radius(new Fraction())
{
    radius->setNum(arg1.getNum());
    radius->setDenom(arg1.getDenom());
}
记住删除析构函数中的对象

Circle::Circle(const Fraction &other) : radius(new Fraction(other))
{
}

您可以通过按值而不是指针存储
radius
来消除分配。

您忘记在复制构造函数和默认构造函数中初始化
radius
。这会在尝试调用
setNum
setDenom
时导致异常。您可以通过为
radius
分配
分数来解决此问题,如下所示

class Circle {
public:
    Circle();
    Circle(const Fraction& arg1);
   ~Circle();
    void print(void);
protected:
    Fraction radius;
};

Circle::Circle(const Fraction& arg1) : radius(arg1)) {
}
惯用的做法是通过复制构造初始化
radius

Circle::Circle() : radius(new Fraction())
{
    radius->setNum(1);
    radius->setDenom(1);
}

Circle::Circle(const Fraction &other) : radius(new Fraction())
{
    radius->setNum(arg1.getNum());
    radius->setDenom(arg1.getDenom());
}
记住删除析构函数中的对象

Circle::Circle(const Fraction &other) : radius(new Fraction(other))
{
}

您可以通过按值而不是指针存储
radius
来消除分配。

为什么
radius
是指针?为什么
radius
是指针?