I nomi contenuti in un enum sono simboli esistenti solo al momento della compilazione, non puoi convertire automaticamente una stringa in un enum. Di norma per fare questo si fa così:
codice:
#include <iostream>
using namespace std;
enum inutile
{
    cactus,
    macachi,
    cannibali,
    Alcibiade
};

int main()
{
    char buf[256];
    inutile i;
    cin>>buf;
    if(strcmp(buf,"cactus")==0)
        i=cactus;
    else if(strcmp(buf,"macachi")==0)
        i=macachi;
    else if(strcmp(buf,"cannibali")==0)
        i=cannibali;
    else if(strcmp(buf,"Alcibiade")==0)
        i=Alcibiade;
    else
        cout<<"Scelta non valida"<<endl;
    //...
    return 0;
}
ma volendo ti puoi aiutare un pochino con una macro:
codice:
#define STR2ENUMIF(stringvar,enumvar,enumval) if(strcmp(stringvar,#enumval)==0) enumvar=enumval;
#include <iostream>
using namespace std;
enum inutile
{
    cactus,
    macachi,
    cannibali,
    Alcibiade
};

int main()
{
    char buf[256];
    inutile i;
    cin>>buf;
    STR2ENUMIF(buf,i,cactus)
    else STR2ENUMIF(buf,i,macachi)
    else STR2ENUMIF(buf,i,cannibali)
    else STR2ENUMIF(buf,i,Alcibiade)
    else
        cout<<"Scelta non valida"<<endl;
    //...
    return 0;
}
.