because const in front of char ** does not add constness to the place where you wanted to add it. Therefore you cannot convert char ** to const char **. You can convert char ** to char * const * which is what you are trying to do.
Why can't you convert char ** to const char **? Because to do so would allow this:
Code:
const char * literal1 = "aaaaa";
char text[] = "bbbbb";
char * ptr2 = text; // legal. We're allowed to modify this
char ** pptr2 = &ptr2; // legal
const char ** pptr1 = (char **) pptr2; // illegal so C-cast it
*pptr1 = literal1; // allowed because the pointer itself is not const
// it's a pointer to const char * and literal1 is a const char *
ptr2 = *pptr2; // legal
ptr2[0] = 'c';
Which character did we change (or try to change) to 'c'?