Because you have defined other constructors, but not a default constructor, the compiler does not generate a default constructor for your coordinate class.
A default constructor is required when your InitDirect3d instance is created since it has to create the Coordinate3d member.
Initialiser lists are a solution here:
IntDirection3d(Coordinate3d cpar, bool signpar) : c(cpar),sign(signpar) { /* c = cpar; sign = signpar; */ }
By doing an assignment as you were before in the constructor body, the compiler has to first construct a coordinate with a default constructor then assign to this instance with the assignment operator when it runs InitDirection3d's constructor body.
A type like a coordinate probably does want a default constructor though (that, say, sets its members to zero).