Wenn ich versuche, diesen Code zu kompilieren:Warum klagen g ++ bei der Verwendung von Template-Typen in graph_traits <>?
struct BasicVertexProperties
{
Vect3Df position;
};
struct BasicEdgeProperties
{
};
template < typename VERTEXPROPERTIES, typename EDGEPROPERTIES >
class Graph
{
typedef adjacency_list<
setS, // disallow parallel edges
vecS, // vertex container
bidirectionalS, // directed graph
property<vertex_properties_t, VERTEXPROPERTIES>,
property<edge_properties_t, EDGEPROPERTIES>
> GraphContainer;
typedef graph_traits<GraphContainer>::vertex_descriptor Vertex;
typedef graph_traits<GraphContainer>::edge_descriptor Edge;
};
g ++ mit dem folgenden Fehler in der klagt "typedef graph_traits <>" line:
error: type 'boost::graph_traits<boost::adjacency_list<boost::setS, boost::vecS,
boost::bidirectionalS, boost::property<vertex_properties_t, VERTEXPROPERTIES,
boost::no_property>, boost::property<edge_properties_t, EDGEPROPERTIES,
boost::no_property>, boost::no_property, boost::listS> >' is not derived from type
'Graph<VERTEXPROPERTIES, EDGEPROPERTIES>'
Ich fand heraus, dass der Compiler nicht zu wissen scheint dass meine Vorlagenparameter Typen sind, aber "typename" vor ihnen in der Eigenschaftsdefinition zu setzen, hilft nicht.
Was ist los? Ich möchte einfach eine templated Graph-Klasse haben, um die Möglichkeit zu haben, beliebige Eigenschaften zu verwenden, die von den oben definierten grundlegenden Eigenschaftsstrukturen abgeleitet sind, so dass ich Methoden in diesem Graph haben kann, die mit den grundlegenden Eigenschaften arbeiten.
Das ist, weil Compiler kann nicht herausfinden, was ist :: Vertex_description und :: Edge_description, mit Typedef Typname Sie sagen ihm, dass graph_traits <> :: Vertex_description ist ein Typ – stefanB