C++ 对'';

C++ 对'';,c++,C++,我被赋予执行该功能: "static double distanta (const Complex&, const Complex&);" 返回两个复数之间的距离。函数的定义它在复杂类中,我实现了它,如下所示: double Complex::distanta(const Complex &a, const Complex &b) { double x = a.real() - b.real(); double y = a.imag()

我被赋予执行该功能:

 "static double distanta (const Complex&, const Complex&);"
返回两个复数之间的距离。函数的定义它在复杂类中,我实现了它,如下所示:

double Complex::distanta(const Complex &a, const Complex &b)
{    
    double x = a.real() - b.real();
    double y = a.imag() - b.imag();

    return sqrt(x * x + y * y);
}
据我所知,静态函数只能访问静态成员,而我的类只有

double _re;
double _im;
作为数据成员

在main函数中,我将其称为:

#include <iostream>
#include "complex.h"

using namespace std;

int main()
{
    Complex* firstComplexNumber; 
    firstComplexNumber = new Complex(81, 93);

    cout << "Numarul complex este: " << *firstComplexNumber << endl;

    Complex* secondComplexNumber;
    secondComplexNumber = new Complex(31, 19);

    cout << "Distanta dintre cele doua numere" <<endl << endl;
    Complex::distanta(firstComplexNumber, secondComplexNumber);
    return 0;
}
#包括
#包括“complex.h”
使用名称空间std;
int main()
{
复数*第一复数;
firstComplexNumber=新复合体(81,93);
cout当函数获取引用(
const Complex&
)时,您正在传递指针(
Complex*
)。引用和指针是完全不同的东西。当函数需要引用参数时,您需要直接将对象传递给它。引用只意味着对象没有被复制

要获得要传递给函数的对象,需要取消对指针的引用:

Complex::distanta(*firstComplexNumber, *secondComplexNumber);
或者让函数获取指针参数

但是,我并不真正建议上述任何一种解决方案。因为这里不需要动态分配(而且由于不
delete
new
ed而导致内存泄漏),所以最好不要首先使用指针:

Complex firstComplexNumber(81, 93);
Complex secondComplexNumber(31, 19);
Complex::distanta(firstComplexNumber, secondComplexNumber);

您正试图在需要引用的位置传递指针(您不删除这些指针,从而导致内存泄漏)。此处不需要指针:

Complex firstComplexNumber(81, 93);
Complex secondComplexNumber(31, 19);

cout << "Numarul complex este: " << firstComplexNumber << endl;
//                                  ^^^^^^^^^^^^^^^^^^ No need to dereference now

// ...

Complex::distanta(firstComplexNumber, secondComplexNumber);
complefirstcomplexnumber(81,93);
复二次复合数(31,19);

cout是
Complex::distanta
一个静态方法吗?您能发布一个,这样我们就可以重现这个问题吗?您正在将两个对象实例传递给静态方法,因此,如果这些实例成员是公开的,那么它对这些实例成员的操作应该没有问题。只要它被定义为静态双distanta(const Complex&,const Complex&);在我看来,这是一个静态方法。静态方法根本无法访问
this
,但在这种情况下,这应该不是问题。所有
a.real()
b.imag()< Teodora >让我猜,java或C++的经验。<代码> < <代码> >只需要C++中的动态生存数据,并且应该谨慎使用。哦,如果SFBABIT的答案解决了你的问题,给答案一个复选标记。@ Teodora现在工作了,但是你明白为什么吗?也不要忘记删除。当你完成任务时,你的对象就离开堆了。不,我没有经验,这是我第二天的写作C++。我在UNI的第一年,现在还没有把计算机科学搞上去。我猜,或多或少,是的。Teodora,你应该更仔细地阅读SFTabBIT的反应,研究参考、撤销和指针。s、 您还需要在处理完对象后将其从堆中删除。如果这些对象包含在循环中,则会造成严重的内存泄漏。这^没有理由在堆中创建firstComplexNumber和secondComplexNumber。如果确实在堆中创建它们,最好记住在完成后将其删除。@crush:I think我确实指出了这一点。还是我遗漏了什么?这就是为什么我开始说
This^
。我的评论是注释,而不是评论。