Your compiler is doing the right thing here. In short, you can't do that. You can convert between a base class pointer and a derived class pointer, provided they point to the same object. But an array-of-Base and array-of Derived are not the same thing.
The good news is what you want to do is easier than you think. A derived class pointer already implicitly converts to a Base class pointer without casting. Assuming you know the sizes of your two arrays, and the sizes are the same, it's a simple loop:
// Given:
A** someNumbers;
B** someValues;
for (int i = 0; i < size; ++i) {
*someNumbers[i] = *someValues[i];
}
Also, this sort of problem is why we have standard containers like vector. Some really smart people have already solved this pointer madness for you. I highly recommend taking advantage of it. It'll make your C++ experience a ton better.