0

動的に作成された構造体要素で構造体のベクトルを埋めようとしています。以下のコードはすべて、TD_Dijkstra_OS という名前のクラスに含まれています。

構造:

struct instFunDescLeg
 {
float Ap, Bp, tfail;
typename GraphType::NodeIterator n; //external library data type 
};

アイテムのフィールドで関数に割り当てるために必要な値を次のように計算します。

           v = G.target( e);

            FunDataType Ap, Bp, offset, slope;

    v->dist = getEarliestArrivalTime( e, u->dist, slope, offset); //TEST
            //if( getEarliestArrivalTime( e, u->dist, slope, offset) != v->dist)
            //    continue;

            Ap = ( 1 + slope) * u->Ap;
            Bp = ( 1 + slope) * u->Bp + offset;

            if( v->timestamp != (*m_timestamp))
            {
                v->Ap = Ap;
                v->Bp = Bp;

                Q.push( v);
                v->timestamp = (*m_timestamp);
            }

            else
            {
                if( Ap < v->Ap)
                {
                    v->Ap = Ap;
                    v->Bp = Bp;
                }

                else if( Ap == v->Ap && Bp > v->Bp)
                    v->Bp = Bp;
            }
            v->tfail = v->dist;
            storeInstFunDescLeg(v);

次に、構造体アイテムを作成し、次のように宣言された instFunDescLeg アイテムのベクトルに挿入しようとします。

  std::vector<struct instFunDescLeg> bp;

この関数に:

 void storeInstFunDescLeg(const NodeIterator& u)
{
//representation: (idn:(Ap(tfail),Bp(tfail),idfn(tfail))), for a node identified by idn
//store into a vector
instFunDescLeg* leg;
leg = new instFunDescLeg();

leg->Ap = u->Ap;
leg->Bp = u->Bp;
leg->tfail = u->tfail;
leg->n = u;

bp.push_back(leg);
}

これをコンパイルすると、bp.push_back(leg) に一致する関数がないというエラー メッセージが表示されます。エラーメッセージの後のメモは、この状況に光を当てます:

 /usr/include/c++/4.6/bits/stl_vector.h:826:7: σημείωση:   no known conversion for 
 argument 1 from ‘TD_Dijkstra_OS<DynamicGraph<AdjacencyListImpl, node, edge> 

::instFunDescLeg*' を 'const value_type& {別名 const TD_Dijkstra_OS >::instFunDescLeg&}' に

誰かが挿入手順の実装を手伝ってくれますか?

4

1 に答える 1

2

std::vector<struct instFunDescLeg> bp;書かれるべきstd::vector<instFunDescLeg> bp;

あなたの構造体はかなり単純なので、提供されたものにポインターのベクトルを格納する必要はないと思います。ポインターの使用を強制する隠れた要件がある場合は、スマート ポインター クラスの背後にそれらを隠すようにしてください (例: unique_ptr)。

于 2013-09-10T16:38:57.783 に答える