2
std::array<LINE,10> currentPaths=PossibleStrtPaths();
LINE s=shortestLine(currentPaths);                       //ERROR

LINE CShortestPathFinderView::shortestLine(std::array<LINE,10> *currentPaths)
{
std::array<LINE,10>::iterator iter;

LINE s=*(currentPaths+1);                      //ERROR

for(iter=currentPaths->begin()+1;iter<=currentPaths->end();iter++)
{
     if(s.cost>iter->cost)
     s=*iter;
}

std::remove(currentPaths->begin(),currentPaths->end(),s);

    //now s contains the shortest partial path  
return s; 


}

在这两个陈述中,我都遇到了同样的错误: no suitable conversion from std::array<LINE,10U>*currentPaths to LINE。为什么会这样?我应该以另一种方式传递数组吗?我也尝试过将currentPaths 作为引用传递,但它告诉我无法初始化该类型的引用。

4

2 回答 2

4

您说您尝试了参考,但失败了。我不知道为什么,因为那是正确的做法。

LINE CShortestPathFinderView::shortestLine(std::array<LINE,10> &currentPaths);

从它的声音来看,您还使用了临时变量的引用。那是错误的。

std::array<LINE,10>& currentPaths = PossibleStrtPaths(); // WRONG
std::array<LINE,10>  currentPaths = PossibleStrtPaths(); // RIGHT
LINE s = shortestLine(currentPaths);

最后,第一个元素是数字零。[]当您进行数组访问时,下标运算符是首选。所以:

LINE s = currentPaths[0];

但是您也可以轻松地从迭代器中获取第一项。

最终代码:

/* precondition: currentPaths is not empty */
LINE CShortestPathFinderView::shortestLine(std::array<LINE,10>& currentPaths)
{
    std::array<LINE,10>::iterator iter = currentPaths.begin();
    LINE s = *(iter++);

    for(; iter != currentPaths->end(); ++iter) {
       if(s.cost>iter->cost)
          s=*iter;
    }

    std::remove(currentPaths.begin(), currentPaths.end(), s);

    //now s contains the shortest partial path  
    return s;
}
于 2012-12-28T14:17:10.100 回答
0

您正在取消引用(currentPaths+1)类型std::array*(更准确地说:您正在递增指针,然后访问其指向的数据),而您可能想要检索 的第一个元素currentPaths,即:(currentPaths[0]数组中的第一个索引是 0)。

于 2012-12-28T14:15:20.010 回答