2012-04-07 59 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)不是指向重复对象列表的指针。 – 2012-04-07 07:39:21

+0

同意Semih Ozmen你应该考虑修改你的Struct定义,因为这里的意图有点奇怪而不是标准形式。 – EdChum 2012-04-07 07:52:26

回答

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将被删除。 – 2012-04-07 07:42:20