Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在我的图形访问者完成后访问属性_C++_Boost_Destructor_Boost Graph - Fatal编程技术网

C++ 在我的图形访问者完成后访问属性

C++ 在我的图形访问者完成后访问属性,c++,boost,destructor,boost-graph,C++,Boost,Destructor,Boost Graph,我在使用boost图形库中的广度优先搜索时遇到问题。 我想在完成图形的访问后,获得visitor类的一个属性 // init my visitor BfsVisitor bv; // auto like in C++-0x BOOST_AUTO (visit, boost::visitor(bv)); // launch search boost::breadth_first_search (graph, vertex, visit); // get result ("typedef pair&

我在使用boost图形库中的广度优先搜索时遇到问题。 我想在完成图形的访问后,获得visitor类的一个属性

// init my visitor
BfsVisitor bv;
// auto like in C++-0x
BOOST_AUTO (visit, boost::visitor(bv));
// launch search
boost::breadth_first_search (graph, vertex, visit);
// get result ("typedef pair<string, int*> result")
result res = bv.getResult();
// print res: SegFault, `res.second' is NULL
std::cout << *(res.second) << std::endl;
我只想在检查顶点方法的所有过程结束时访问我的属性。我查看了boost graph访问者文档,但没有找到任何解决问题的方法。
希望您能提出建议。

请提供一个简短的自包含编译示例。伪代码是有用的或有限的。上面的代码没有
参数
,没有
\u res
,并且有一个坏拷贝构造函数,显然不是您的问题的最小示例。制作一个完整的简短示例来演示您的问题。@Yakk我修复了我的代码以添加属性和一些进程,但我的进程可以按我的意愿工作。我可以毫无问题地打印单个结果。我不能给你上行政课,所以你必须相信问题不在里面。对于复制构造函数,我只使用它来打印调用。我自己通常不定义它。From:“由于visitor参数是通过值传递的,因此如果您的visitor包含状态,那么在算法期间对状态的任何更改都将被复制到visitor对象,而不是传入的visitor对象。因此,您可能希望visitor通过指针或引用保持此状态。”。谢谢,我没有看到那张纸条。。。似乎现在起作用了。回答“是”——
\u res
的来源相当重要@llonesmiz你应该把答案贴出来,这样Turgal就可以接受了
class BfsVisitor : public boost::default_bfs_visitor
{
public:
  BfsVisitor()
  {
    std::cout << boost::this_thread::get_id()
          <<" ~~ CONSTRUCTOR" << std::endl;
  }
  BfsVisitor(const BfsVisitor& b)
    : boost::bfs_visitor<>(),
      _res (b._res),
      _arg (b._arg)
  {
    std::cout << boost::this_thread::get_id()
              <<" ~~ COPY" << std::endl;
  }
  ~BfsVisitor()
  {
    std::cout << boost::this_thread::get_id()
              <<" ~~ DESTRUCTOR" << std::endl;
  }

  /// Visitor methods
  void discover_vertex(const vertex_t& s,
                       const Graph& g)
  {
    std::cout << boost::this_thread::get_id()
              << " -> Discover vertex: " << g[s]._id << std::endl;
    Executive exec* = g[s]._executive;
    _arg.insert(_res);
    exec->setArguments(_arg);
    // other process
  }
  void examine_vertex(const vertex_t& s,
                      const Graph& g)
  {
    std::cout << boost::this_thread::get_id()
              << " -> Examine vertex: " << g[s]._id << std::endl;
    Executive exec* = g[s]._executive;
    exec->launch(&_res);
    // other process
  }

  /// Getter
  result getResult() const
  {
    std::cout << boost::this_thread::get_id()
              << " ~~ Get Result" << std::endl;
    return _res;
  }

private:
  result _res;
  argument _arg; // typedef std::map
}
b7495b40 ~~ COPY
b7495b40 ~~ COPY
b7495b40 ~~ DESTRUCTOR
b7495b40 ~~ COPY
b7495b40 ~~ COPY
b7495b40 ~~ COPY
b7495b40 ~~ COPY
b7495b40 -> Discover vertex: 1
b7495b40 -> Examine vertex: 1
b7495b40 -> Discover vertex: 2
b7495b40 -> Examine vertex: 2
b7495b40 -> Discover vertex: 3
b7495b40 -> Examine vertex: 3
b7495b40 ~~ DESTRUCTOR
b7495b40 ~~ DESTRUCTOR
b7495b40 ~~ DESTRUCTOR
b7495b40 ~~ DESTRUCTOR
b7495b40 ~~ Get Result
Segmentation fault (core dumped)