gpt4 book ai didi

c++ - 构造函数,制作对象

转载 作者:行者123 更新时间:2023-11-30 03:47:33 26 4
gpt4 key购买 nike

我正在做一个关于 C++ 的小家庭作业,我遇到了一个小问题。当我尝试运行该程序时出现以下错误:

Exception thrown at 0x00E0193B in ConsoleApplication6.exe: 0xC0000005: Access violation writing location 0x00000000.

如果有这个异常的处理程序,程序可以安全地继续。

我尝试调试我的程序,我注意到,当我尝试创建对象 c1 时,该程序用完了。方法 v_setR 做得很好,但是 v_setCenter 给出了这个错误。我不知道我做错了什么,但我认为这是一个简单的错误。感谢您的帮助:)

这是主要的cpp:

#include "stdafx.h"
#include <iostream>
#include "Punkt.h"
#include "Okrag.h"
#include "math.h"

/*double Circle::d_distance(Point pcOther)
{
double d_result = sqrt(
(pd_point.d_getX - pcOther.d_getX)*(pd_point.d_getX - pcOther.d_getX)
+ (pd_point.d_getY - pcOther.d_getY)*(pd_point.d_getY - pcOther.d_getY)
);
return d_result - d_r;
}*/

Circle::Circle(double dX, double dY, double dR)
{
v_setR(dR);
v_setCenter(dX, dY);
}

void main()
{
Point p1(1, 2);

Circle c1(5,4,4);

//std::cout << c1.d_distance(p1);

system("pause");
}

就是point.h和circle.h

class Point
{
friend class Circle;
//friend double d_distance(Point &pcOther);

public:
Point() { };
Point(double dX, double dY) : d_x(dX), d_y(dY) { };

// Setters
void v_setX(double dX) { this->d_x = dX; }
void v_setY(double dY) { this->d_y = dY; }
void v_setPoint(double dX, double dY) { this->d_x = dX; this->d_y = dY; }

// Getters
double d_getX() { return d_x; }
double d_getY() { return d_y; }

private:
double d_x, d_y;
};

class Circle
{
friend class Point;

public:
Circle();
Circle(double dX, double dY, double dR);

// Setters
void v_setR(double dR) { d_r = dR; }
void v_setCenter(double dX, double dY) { pd_point->v_setPoint(dX, dY); }
// Getters
double d_getR() { return d_r; }
Point *d_getCenter() { return pd_point; }
//double d_distance(Point &pcOther);

private:
Point *pd_point;
double d_r;
};

最佳答案

您没有为 pd_point 指针分配任何内存。因此尝试访问 pd_point->v_setPoint(dX, dY);有故障。

为了解决这个问题,您可以在 circle 的构造函数中为您的指针分配内存,如下所示:

Circle::Circle(double dX, double dY, double dR)
{
this->pd_point = new Point();
v_setR(dR);
v_setCenter(dX, dY);
}

不过我不得不说,使用初始化列表会让您受益匪浅。有更好的初始化方法

关于c++ - 构造函数,制作对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654484/

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