3

我遇到了一些问题,我不确定是我对指针的理解,还是虚幻本身。这是我的代码

TArray<Anode> nodes;
TActorIterator<Anode> ActorItr = TActorIterator< Anode >(GetWorld());

while (ActorItr) //Go through EVERY Node and check distance
{
    if (this->GetUniqueID() != ActorItr->GetUniqueID())
    {

        //Check Distance
        if (FVector::DistSquared(this->GetActorLocation(), ActorItr->GetActorLocation()) < 262144) //Check the distance between the two nodes.
        {
            Anode node = ActorItr;
            //Anode* node = Cast<Anode>(*ActorItr);

            nodes.Add(node); //Calls a error because
            //cannot convert from 'TActorIterator<Anode>' to 'Anode'

        }
        }
    }
}

所以我的问题是我无法将 Actor Iterator 转换为我的 TArray,并且我玩过取消引用等,我让它编译但在运行时崩溃。谢谢!

编辑:为清楚起见

我努力了

Anode node = *ActorItr;

但收到错误 C2440:“正在初始化”:无法从“Anode *”转换为“Anode”。然后我尝试了

Anode *node = *ActorItr;
nodes.Add(*node); 

它编译但使用未处理的内存或其他东西创建了运行时错误,我认为这是因为它只是将指针交给 TArray 而没有处理问题(对吗?)。我理解我所感受到的概念,但不理解语法。

4

1 回答 1

3

演员迭代器不是演员,所以直接赋值没有任何意义。尝试取消对迭代器 ( Anode* node = *ActorItr;) 的引用,该运算符应该被重载以返回迭代的当前元素,即您要使用的节点。

于 2014-04-29T17:33:56.530 回答