471,852 Members | 1,453 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,852 software developers and data experts.

Problem in using the Graph object in different function

151 100+
I am creating a graph using boost library, I am making the network using create_Network function()
i am adding the vertices to this graph by creating the object g of class Graph.
I am trying to use this object g in the another function get_neighbours()
but it is not giving any result.Should I make it global or should use constructor so that values stored in the graph(vertices) object(g), can be used in any function.

#include <boost/config.hpp>
#include <iostream>
#include <vector>
#include <utility>
#include <string>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>
#include <boost/property_map.hpp>
#include "ed.h"
#include "ve.h"
using namespace boost;
using namespace std;

class Molecule
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
map<int,string> m;

void set_molecule_property(vector<string>& s4)
for (unsigned int i = 1; i <= s4.size(); i++)

void create_chemical_Network(vector<int> s1,vector<int> s2,vector<int> s3)
const int V = m.size()+1;
Graph g(V);
for (int i = 0; i <V ; i++)
add_edge(vertex(s1[i], g), vertex(s2[i], g), ed::EdgeProperties("single bond"), g);
add_edge(vertex(s1[i], g), vertex(s2[i], g), ed::EdgeProperties("double bond"), g);
add_edge(vertex(s1[i], g), vertex(s2[i], g), ed::EdgeProperties("triple_bond"), g);

void get_neighbours()
//Graph g(m.size()+1);
Graph g;
property_map<Graph, std::size_t ve::VertexProperties::*>::type
id = get(&ve::VertexProperties::index, g);
property_map<Graph, std::string ed::EdgeProperties::*>::type
name = get(&ed::EdgeProperties::name, g);
boost::graph_traits<Graph>::vertex_iterator vi, viend;
int vnum = 0;
for (boost::tie(vi,viend) = vertices(g); vi != viend; ++vi)
id[*vi] = vnum++;
graph_traits<Graph>::vertex_iterator i, end;
graph_traits<Graph>::out_edge_iterator ei, edge_end;
for (boost::tie(i,end) = vertices(g); i != end; ++i)
cout << id[*i]<<"("<<m[id[*i]]<<")" << " ";
for (boost::tie(ei,edge_end) = out_edges(*i, g); ei != edge_end; ++ei)
cout << " --" << name[*ei] << "--> " << m[id[target(*ei, g)]] << " ";
cout << endl;
print_edges(g, id);

int main(int,char* [])
using namespace boost;
Molecule mol;
int s11[]={1,1,2,2,3,3,4,4,5,5,6,6,6,7,7,7,8,8,8,8,9,9,10,1 0,11,11,12,12,13,14,17,19,19,19,20,20,20,21,21,21} ;
int s12[]={13,19,14,20,15,21,16,18,17,18,16,27,28,18,38,39, 9,10,22,23,11,12,16,17,14,24,13,25,15,15,26,29,30, 31,32,33,34,35,36,37};
int s13[]={1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2, 1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1};
string s14[]={"O","O","O","N","N","N","N","C","C","C","C","C", "C","C","C","C","C","C","C","C","C","H","H","H","H ","H","H","H","H","H","H","H","H","H","H","H","H", "H","H"};
vector <string> s4;
vector <int> s1,s2,s3;

for (unsigned int i = 0; i < sizeof(s11)/sizeof(string); i++)

for (unsigned int i = 0; i < sizeof(s14)/sizeof(string); i++)
return 0;

Please Help me out of this pblm.I will be really thankful to you.
Apr 5 '08 #1
1 1670
9,208 Expert Mod 8TB
Your Graph objects are local to the funciton. Local variables are destroyed when the function ends.

The Graph object g in get_neighbours() is not the one created in create_chemical_Network().

You need to create your Graph object on the heap and then pass a pointer to it to your various functions.

Also, get_neighbours() has no arguments and returns a void. That means your entire application is inside this thing, in which case having the funciton at all is pointless. Or you are using global variables which are a disaster waiting to happen.

If you are using global variables, the you should read the Case Against Global Variables in the C/C++ HowTos forum.
Apr 5 '08 #2

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

7 posts views Thread by news | last post: by
1 post views Thread by Heather | last post: by
5 posts views Thread by Shawn Hamzee | last post: by
2 posts views Thread by savas_karaduman | last post: by
6 posts views Thread by Tony Johansson | last post: by
reply views Thread by NeoPa | last post: by
reply views Thread by aboka | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.