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

の最初の要素、つまり(配列の最初のインデックスは 0)を取得したいのに、(currentPaths+1)どの型が参照解除されていますか (より正確には、ポインターをインクリメントしてから、そのポイントされたデータにアクセスしています)。std::array*currentPathscurrentPaths[0]

于 2012-12-28T14:15:20.010 に答える