我在开发天文馆软件时正在学习C++。我正在使用Visual Studio Enterprise 2015.通过引用传递类实例
我遇到了通过引用传递两个类实例的麻烦。
这是我如何创建两个类实例,并将它们传递给方法:
MyTime* newRightAscension = new MyTime(0, 0, 0, 0, 0);
DegreesCoordinate* newDeclination = new DegreesCoordinate(0, 0, 0, NotSet);
precession->RigorousMethod(epoch1, rightAscension, declination, epoch2, newRightAscension, newDeclination);
这是precession->RigorousMethod
方法声明:
void Precession::RigorousMethod(
DateTime * epoch1,
MyTime * rightAscension,
DegreesCoordinate * declination,
DateTime * epoch2,
MyTime* newRightAscension,
DegreesCoordinate* newDeclination)
这我怎么更新newRightAscension
和newDeclination
里面的值该方法:
newDeclination = new DegreesCoordinate(decResult->getDegrees(), decResult->getMinutes(), decResult->getSeconds(), decResult->getDirection());
newRightAscension = new MyTime(raResult->getHour(), raResult->getMinute(), raResult->getSeconds(), raResult->getTimeZone(), raResult->getDayLightSavings());
创建一个新的实例,但是当我在方法执行后检查这些值时,他们没有这些值。
我在做什么错?
您显示的代码是传递一个指针,而不是“引用实例”,而您的预期用途似乎需要通过引用传递指针:在'RigorousMethod'的签名中,这将是'DegreesCoordinate *&newDeclination'。但是,然后你所描述的看起来像是内存泄漏,所以你可能应该改变更多。 – JSF
您正在newDeclination和newRightAscension中创建一个新的类实例,覆盖传递给该函数的指针的值(并导致内存泄漏)。如果要更改在函数外创建的实例的类成员的值,只需调用set函数即可。如果你想在函数内部分配新的实例,你需要通过**或*& - 不需要在函数外部分配。 – EylM
你真的想通过创建一个新的对象来改变'newDeclination'吗?这将通过传递'*&'来完成,正如我在第一条评论中所描述的那样。但通过'&'传递并更改对象的内容(而不是创建新对象)可能更有意义。 – JSF