[英]C++ Declaration of reference variable requires an initializer?
我有一个指针/取消引用问题,我收到错误:
引用变量的声明需要一个初始化器
具有以下内容:
CastInfo& out;
if(SegmentCast(mOwner->GetGame()->GetPlayer(), mLineSegment, out))
{
此 SegmentCast function 使用以下参数定义:
bool SegmentCast(Actor* actor, const LineSegment& l, CastInfo& outInfo)
CastInfo
定义为:
struct CastInfo
{
// Point of collision
Vector3 mPoint;
// Normal at collision
Vector3 mNormal;
// Owning actor you collided with
class Actor* mActor = nullptr;
};
因为没有构造函数,我无法通过执行CastInfo& out = CastInfo()
进行初始化,但我不知道如何使用 CastInfo output 调用 SegmentCast function。
如何使用此参考变量正确调用此 function?
此代码的 2 个问题
CastInfo& out;
if(SegmentCast(mOwner->GetGame()->GetPlayer(), mLineSegment, out))
{
首先,您实际上必须在某个地方有一个 CastInfo 实例,可以在对 SegmentCast 的调用中引用它
其次,您不能创建未绑定到实际 object 的引用(与指针不同)
如果你想要一个本地实例
CastInfo out;
if(SegmentCast(mOwner->GetGame()->GetPlayer(), mLineSegment, out))
{
这将创建一个本地堆栈实例,将传递对它的引用(您无需执行任何其他操作,编译器知道这就是 function 想要的)
或者如果你需要一个堆实例
CastInfo *out= new CastInfo();
if(SegmentCast(mOwner->GetGame()->GetPlayer(), mLineSegment, *out))
{
这会指向堆 object。要将它传递给 function,您需要对它进行推导 ( *out
),然后编译器会将其作为引用传递(就像第一个示例一样)
理想情况下,您会使用std::unique_ptr
而不是原始的new
和指针。 如果你不这样做,那么记得在完成后删除
警惕指针和引用之间的类比; 这通常会令人困惑。 指针可以指向任何地方; 引用总是指向 object。因此,尽管您可以写出CastInfo* out;
, 它创建一个具有未指定值的指针,你不能写CastInfo& out;
; 这是不允许的。 如果您需要创建引用,则必须有一个它引用的 object:
CastInfo info;
CastInfo& out = info;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.