Question

#include "PQueue.h"

struct arcT;

struct coordT {
    double x, y;
};

struct nodeT {
    string name;
    coordT* coordinates;
    PQueue<arcT *> outgoing_arcs;
};

struct arcT {
    nodeT* start, end;
    int weight;
};

int main(){
    nodeT* node = new nodeT; //gives error, there is no constructor
}

My purpose is to create a new nodeT in heap. Error is:

error C2512: 'nodeT' : no appropriate default constructor available

Was it helpful?

Solution

PQueue<arcT *> does not have an appropriate default constructor, so a default constructor for nodeT cannot be generated by the compiler. Either make an appropriate default constructor for PQueue<arcT *> or add a user-defined default constructor for nodeT which constructs outgoing_arcs appropriately.

OTHER TIPS

If the currently posted code in the question is an exact copy, then the only possible cause for this error is that PQueue<…> doesn’t define a default constructor, and defines another constructor instead.

Otherwise this code would compile.

More precisely, since you didn’t define a constructor for your structures, C++ tries to auto-generate them. It can only do this, though, as long as all its member variables are appropriately default constructible or initialisable. std::string has a default constructor, and coordT*, being a pointer, can be initialised. So only PQueue<…> remains as the culprit.

THis may not be your problem but you've only declared one pointer on this line in arcT :-

nodeT* start, end;

You've declared start as a pointer and end as an actual nodeT object. Is this what you wanted to do?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top