That array needs to allocate memory for each object as soon as it's declared, so when you do:
Coords coordinates[7];
It will allocate space for 7 Coords and initialize them with the default constructor. But here you have no default constructor - you provided your own which takes parameters, so this line should fail to compile as the compiler doesn't know what to initialize them with. If the size of your array is known, you can initialize them like this:
Coords coordinates[7] = { Coords(1, 2), Coords(7, -2), Coords(4, 0), /* ... */ };
If it isn't, then you can't really do it. In this case what you want is an array of pointers to coordinates, like this, which is closer to what you seem to want:
Coords *coordinates[7]; // can be done, since we're just allocating space for pointers
for (int t = 0; t < 7; ++t) coordinates[t] = new Coords(x, y); // !!
// don't forget to delete them when you no longer need them
Or, better yet, use an std::vector. That's what it's for
TL;DR: classes need to be constructed immediately after allocation. You can't have a "allocated but not created yet" object in C++. But pointers provide a mechanism to achieve the kind of behaviour you are seeking. Also, raw pointers are kind of non-idiomatic in C++. You should be using references to pass objects around, and, if you must, use smart pointers to have better control over your objects. I know it's tempting to do "C with classes" coding but C++ has more features than just classes, it has its own standard library and way of doing things.