gpt4 book ai didi

c++ - 错误 : No instance of constructor matches the argument list

转载 作者:太空狗 更新时间:2023-10-29 20:42:12 27 4
gpt4 key购买 nike

作为作业的一部分,我们被要求创建一个 Vector3D 类,它使用在堆上分配的内存。我有一个具有以下构造函数的 Vector3DHeap 类。

Vector3DHeap::Vector3DHeap(float& x, float& y, float& z)
{
this->x = &x;
this->y = &y;
this->z = &z;
}

如果我想获得一个单位 vector ,我希望能够执行以下操作。这会给出错误消息“没有构造函数的实例与参数列表匹配,参数类型是(float,float,float)。

Vector3DHeap* Vector3DHeap::getUnitVector()
{
float m = *getMagnitude();

return new Vector3DHeap((*x / m), (*y / m), (*z / m));
}

如果我定义三个浮点变量 a、b 和 c 并将它们传递给构造函数,编译器会很高兴。上面的代码有什么问题?

Vector3DHeap* Vector3DHeap::getUnitVector()
{
float m = *getMagnitude();

float a, b, c;

a = *x / m;
b = *y / m;
c = *z / m;

return new Vector3DHeap(a, b, c);
}

非常感谢,乔治

最佳答案

第一个版本的问题是您的编译器试图防止错误。

你的第二个版本的问题在于你智取了你的编译器并成功地制造了一个错误。

给定您的构造函数,您希望存储指向通过引用传递的 float 值的指针。由于您的第二个版本现在通过引用局部变量 float a, b, c; 调用构造函数,因此您创建了一个引用它们的 Vector3DHeap 实例。但是一旦 getUnitVector 返回,那些变量就不再存在并且存储在 Vector3DHeap 中的引用变成了悬空引用。

解决方案不是在 Vector3DHeap 中存储指针或创建参数的拷贝:

Vector3DHeap::Vector3DHeap(float x, float y, float z)
{
this->x = new float(x);
this->y = new float(y);
this->z = new float(z);
}

不过,请确保您正确删除了存储的 float 。

关于c++ - 错误 : No instance of constructor matches the argument list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479200/

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