2012-04-07 11 views
0
struct Edge; 

struct Node { 
    int id; 
    vector<Edge> *edges; 
}; 

struct Edge { 
    int id; 
    Node* vertex1; 
    Node* vertex2; 
}; 

int main(){ 
    vector<Edge> nodeEdgeList; 
    Node* nodePtr = new Node; 
    nodePtr->id = vertex; 
    nodePtr->edges = nodeEdgeList; 
} 

最後の行のために次のコンパイラエラーが発生します。ポインタを使って構造体のベクトルを指す方法は?

error: cannot convert 'std::vector<Edge, std::allocator<Edge> >' to 'std::vector<Edge, std::allocator<Edge> >*' in assignment 
+2

ジオメトリエンティティ階層を構築しようとしている場合は、重複したオブジェクトのリストへのポインタではなく、ポインタリスト(ベクトル EdgeList)を保持することをお勧めします。 –

+0

Semih Ozmenに同意するならば、ここで意図しているのは少し奇妙で標準的なものではないので、Struct定義を変更することを検討すべきです。 – EdChum

答えて

3

あなたNodeクラスは、ベクトルを持っている*ようにerror: cannot convert 'std::vector<Edge, std::allocator<Edge> >' to 'std::vector<Edge, std::allocator<Edge> >*' in assignment

変更ここではかなり明確であるあなたは、ポインタ

エラーメッセージに非ポインタを設定しようとしているメンバーとして:

int main(){ 
    vector<Edge> *nodeEdgeList = new Vector<Edge>; 
    Node* nodePtr = new Node; 
    nodePtr->id = vertex; 
    nodePtr->edges = nodeEdgeList; 
} 

または

int main(){ 
    vector<Edge> nodeEdgeList; 
    Node* nodePtr = new Node; 
    nodePtr->id = vertex; 
    nodePtr->edges = &nodeEdgeList; 
} 
2
int main(){ 
    vector<Edge> nodeEdgeList; 
    Node* nodePtr = new Node; 
    nodePtr->id = vertex; 
    nodePtr->edges = &nodeEdgeList; // <-- use & before 
} 
+0

この回答はquetionのニーズを満たしていますが、エラーが発生しやすいです!ここでnodePtrは動的オブジェクトであり、おそらく別の時間と関数で破棄されるまで存在しますが、nodeEdgeListは削除されるため、このスコープが終了すると&nodeEdgeListは無効になります。 –

関連する問題