I defined an double array inside bundled vertex property, and have trouble finding ways of accessing it.
Neither can I find any where in the document an example on it. Your input will be much appreciated!
 
my graph is defined as follows:
 
struct Node
{
  // this is hard to access
  double mode[3];
};
struct Edge
{
  //no problem access them
  double nPixels;
  unsigned short nTh;
};
typedef boost::adjacency_list<
    boost::vecS, boost::vecS, boost::bidirectionalS,
    Node, Edge> Graph;
//Graph object colGraph
Graph colGraph;
I have no problem with accessing the 'nPixels' in Edge property,
 
  boost::property_map<Graph, double Edge::*>::type
   ew = get(&Edge::nPixels, *colGraph);//edge weight
But I am in a great deal of trouble finding ways of accessing 'mode' in Node property.
  //compiler error here
  boost::property_map<Graph, double Node::*>::type
   nm = get(&Node::mode, *colGraph);//node mode
error message is :
//----------------------------------------------------
c:\...\xxx.cpp(236) : error C2440: 'initializing' : cannot convert from 'boost::property_map<Graph,Property>::type' to 'boost::bundle_property_map<Graph,Descriptor,Bundle,T>'
        with
        [
            Graph=boost::adjacency_list<boost::vecS,boost::vecS,boost::bidirectionalS,Node,Edge>,
            Property=double (Node::* )[3]
        ]
        and
        [
            Graph=Graph,
            Descriptor=boost::property_map<Graph,double Node::* >::descriptor,
            Bundle=Node,
            T=double
        ]
        No constructor could take the source type, or constructor overload resolution was ambiguous
//----------------------------------------------------
 
neither the following works(I added '[3]' in the parameter list):
  boost::property_map<Graph, double Node::*[3]>::type
   nm = get(&Node::mode, *colGraph);//node mode
 
This time errors are raised in the 'property.hpp' file, they are:
//----------------------------------------------------
c:\Boost\include\boost-1_33_1\boost\pending\property.hpp(40) : error C2825: 'PropertyTag::kind': cannot form a qualified name
        c:\Boost\include\boost-1_33_1\boost\graph\properties.hpp(198) : see reference to class template instantiation 'boost::property_kind<PropertyTag>' being compiled
        with
        [
            PropertyTag=double Node::* [3]
        ]
        c:\shufei\VCProjects\edison\segm\GA.cpp(236) : see reference to class template instantiation 'boost::property_map<Graph,Property>' being compiled
        with
        [
            Graph=Graph,
            Property=double Node::* [3]
        ]
c:\Boost\include\boost-1_33_1\boost\pending\property.hpp(40) : error C2039: 'kind' : is not a member of 'operator``global namespace'''
c:\Boost\include\boost-1_33_1\boost\pending\property.hpp(40) : error C2146: syntax error : missing ';' before identifier 'type'
c:\Boost\include\boost-1_33_1\boost\pending\property.hpp(40) : error C2955: 'boost::type' : use of class template requires template argument list
        c:\Boost\include\boost-1_33_1\boost\type.hpp(14) : see declaration of 'boost::type'
c:\Boost\include\boost-1_33_1\boost\pending\property.hpp(40) : fatal error C1903: unable to recover from previous error(s); stopping compilation
//----------------------------------------------------

thanks,
 


Connect to the next generation of MSN Messenger  Get it now!