Skip to content
Advertisement

qualified reference to ‘Edge’ is a constructor name rather than a type in this context [closed]

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

here’s my code in full

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
Advertisement