L'errore è questo:

risp è un array di string, quindi risp[1] è una variabile di tipo string. Cos'è string? string l'hai definito com eun array di caratteri, quindi risp[1] è un array di caratteri. Poi tu assegni a risp[1] il valore "Napoleone". Cos'è il valore "Napoleone"? E' un puntatore a carattere, ovvero un oggetto di tipo char *. Ora spesso si dice che array e puntatori sono la stessa cosa, ma c'è una differenza importante, ovvero gli array sono puntatori COSTATNTI, cioè non possono essere riassegnati, ovveero, puoi cambiare gli elementi dell'array, ma non il puntatotre dell'array stesso. Quando fai:

risp[1] = "Napoleone"

stai assegnando all'array risp[1] un nuovo puntatore, ovvero quello rappresentato da "Napoleone", e non si puo fare.

Puoi risolvere in 2 modi:

1 - definire string non come un array ma come un puntatore, cosi puo essere riassegnato:

typedef char *string;

2 - mantieni la definizione di string, però quando vuoi assegnare un certo valore al campo risp[1] non assegni direttamente il puntatore, ma modifchi gli elementi dell'array, ovvero copi uno ad uno i caratteri della stringa "Napoleone" dentro risp[1]. A tal proposito puoi usare una funzione di libreria per copire una stringa in un altra.

Oppure, perchè non usi direttamente le stringhe del c++?