La variabile globale grid è un oggetto (non un puntatore), pertanto viene costruito automaticamente all'avvio del programma con il suo costruttore di default. Non puoi fare quell'assegnamento dato che significherebbe assegnare un puntatore ad un oggetto.
Se tutti i dati per inizializzare l'oggetto sono noti prima ancora che parta il main, semplicemente usa un costruttore parametrizzato al posto del costruttore di default.
In caso contrario, dichiara grid come puntatore (sarebbe anche meglio uno smart pointer come std::auto_ptr o boost::scoped_ptr) e usa new come stai già facendo; se non usi uno smart pointer ricordati la delete alla fine.
Esiste anche una terza via: usi il costruttore di default e poi l'operatore di assegnamento da un rvalue temporaneo:
ma "sprechi" la costruzione con il costruttore di default.codice:grid = Grid(dimA, dimB)
Noto tra l'altro che la tua classe non definisce un operatore di assegnamento e lascia il costruttore di copie vuoto: questa è una condizione potenzialmente pericolosa, o li definisci correttamente (dato che quelli di default nel tuo caso non vanno bene visto che stai gestendo della memoria), altrimenti ti conviene bloccarli, dichiarandoli come private e non implementandoli, in modo da evitare che il compilatore generi quelli di default.