【发布时间】:2016-05-07 19:48:39
【问题描述】:
我正在尝试创建一个包含指针向量的节点类。这是我的代码:
node.h:
#ifndef NODE_H
#define NODE_H
class node
{
public:
vector<node*> next;
void add_arc(node & a)
string some_string;
#endif
node.cpp:
void node::add_arc(node & a)
{
node *b = &a;
next.push_back(b); //only copyies nodes
}
main.cpp:
int main()
{
vector<node> nodes;
node a;
node b;
node c;
a.somestring = "a";
b.somestring = "b";
c.somestring = "c";
a.add_arc(b); //a should point to b
a.add_arc(c); //a should point to c
nodes.push_back(a);
nodes.push_back(b);
nodes.push_back(c);
cout << nodes[0].next.size() << endl; // prints "2", works fine
cout << nodes[0].next[0]->some_string << endl; //empty
}
我认为这就像重载 push_back 一样简单:
void push_back(vertex * pointer)
{
next.push_back(pointer);
}
但我认为我确实需要一个复制构造函数或其他一些方法来完成这项工作。我将如何为指针向量执行此操作?
编辑:我想我没有很好地解释它。看看这个问题的答案: Segmentation fault when accessing a pointer's member function in a vector 将“a”作为参考对我不起作用
【问题讨论】:
-
阅读第二章智能指针
-
为什么要一个连续的容器存储节点?为什么
next应该是std::vector<Node*>? -
cout << nodes[0].next[0]->some_string << endl; //empty好吧,你没有在这段代码中将字符串设置为任何值,所以它是空的 -
问题是 add_arc 中的参数被破坏了,即使有引用,字符串最终也是空的。智能指针真的是最好的方法吗?另外@milleniumbug 我将字符串编辑为具有值,它们最终仍然为空
-
我看不出有任何失败的原因,实际上是it works for me(如果我把你的代码变成minimal reproducible example 并修复语法错误)。