If this were C, then yes, but C++ has stricter typing than C does, so no. What you're doing in this case is tring to assign a Month ** to a Month *. table in this case is a Month[12] or array of 12 Month objects, taking the address of that with (&) returns a pointer to a pointer to a Month, which, like I said, can't be assigned to a Month *.
Try:
Code:
months = &table[0];
Which assigns the address of the first element of table to months.
However, this code won't work as you think. You're trying to keep table around in memory for the life of the Calendar instance, however, using Month table[] = {...} is not the same thing as using Month *table = new Month[12] even though they're both pointers. table, as it is, sits on the stack for the duration of the constructor, then is automatically cleaned up, like any local variable is. Objects created using new or memory allocated using malloc() needs to be free'd or delete'd by you, which is why they stick around for as long as you want them to.
What you need to do is create table using new or malloc(), then initialize each element in it, then assign it to months, as then it will live on the heap, you can delete[] (or free()) it fine, and everything will be right in the world.