NULL je ukazovateľ, zatiaľ čo tvoja funkcia má vrátiť inštanciu triedy Student a nie ukazovateľ na inštanciu.
Riešení je viacero:
1. Použiť namiesto triedy std::list triedu std::map, ktorá má funkciu pre hľadanie podľa kľúča.
2. Prerobiť zoznam študentov tak, aby obsahoval ukazovatele. V prípade neúspechu sa vráti NULL.
3. Zmeniť vyhľadávaciu funkciu tak, aby vrátila iterátor. V prípade neúspechu sa vráti studenti.end().
4. Použiť vzor Null Object. V prípade neúspechu sa vráti nejaká dohodnutá inštancia, reprezentujúca žiadneho študenta.
Edit: Asi si už na to prišiel, ale pre istotu: Ak máš kontajner (std::list, std::map, ...), do ktorého vkladáš priamo inštancie nejakej triedy a nie ukazovatele, tak tá trieda musí implementovať minimálne kopírovací konštruktor, aby to vôbec fungovalo.