The problem with your code is that you have a pointer to an array. That pointer points to an array of Monster -- you can't put pointers into it. What you need is a pointer to an array of pointers, so you'd declare your array as:
Monster **monsters = new Monster*[size];
However, this is reinventing the wheel. This is a perfect place to use a vector. A vector is a STL container class that can be dynamically resized and is very fast when adding things and removing things from the end (although anything can be inserted/deleted from any place inside).
This, for example, creates an array adds 10 integers to it numbered 1 through 10.
#include <vector>int main(){ std::vector<int> integers; for(int i = 0; i < 10; i++) integers.push_back(i);}
If you are particulary perceptive, you might begin to notice that using this implementation has a flaw. When removing pointer elements, the data is not deleted. Thus you've got a memory leak. To fix this, you can either use the boost
ptr_vector or wrap the vector with another class that deletes the data (for pointers). However, I'd question as to whether you'd need to use pointers at all with vectors (you might, it depends on what you're doing with the data, though if your array owns the data, then you probably don't need pointers).