I don’t know Java at all, but I need this program in C++. Can anyone help me convert it? I know OOP in C++, but I’m used to another syntax and do not understand exactly what and how to modify it.

class Graph { class Edge { int src, dest; } int vertices, edges; Edge[] edge; Graph(int vertices, int edges) { this.vertices = vertices; this.edges = edges; edge = new Edge[edges]; for (int i = 0; i < edges; i++) { edge[i] = new Edge(); } } public static void main(String[] args) { int i, j; int numberOfVertices = 6; int numberOfEdges = 7; int[][] adjacency_matrix = new int[numberOfEdges][numberOfEdges]; Graph g = new Graph(numberOfVertices, numberOfEdges); g.edge[0].src = 1; g.edge[0].dest = 2; //do something with graph } }

I tried to do that and I optinut the code below:

class Graph { public: class Edge { private : Graph *parentClass; public: Edge(Graph *parentClass) { this->parentClass = parentClass; } int src; int dest; }; int vertices; int edges; std::vector<Graph::Edge::Edge*> edge; //error 1 qualified reference to 'Edge' is a constructor name rather than a type in this context Graph(int vertices, int edges) { this->vertices = vertices; this->edges = edges; edge = std::vector<Graph::Edge::Edge>(edges); //err 2 no viable overloaded '=' //err 3 qualified reference to 'Edge' is a constructor name rather than a type in this context for (int i = 0; i < edges; i++) { edge[i] = new Graph::Edge::Edge(); //err 4 no matching constructor for initialization of 'Graph::Edge::Edge' } } };

But the code that I got myself, has a number of errors

## Advertisement

## Answer

In the case of your mentioned error 1 and 3, “qualified reference to ‘Edge’ is a constructor name rather than a type in this context” that you mention in your question title the error is because you are using the constructor where the compiler would expect to see a type.

You have:

Graph - this is a class Edge - this is a nested class Edge - the constructor for the Edge class

So when you refer to `Graph::Edge`

that is the class, but `Graph::Edge::Edge`

is the constructor function.

Replace your usage of `Graph::Edge::Edge`

with `Graph::Edge`

to solve that error.

You also have problems where you mix vectors of pointers and vectors of instances.

Your final error 4 is because you are not using the constructor that you have defined (wrong parameters).

**8**People found this is helpful