El código como lo posteaste no compila, ya que:
Código:
int elfo::atacar_t2(){
cout << "aaaarrrrggg..." << endl;
}
no está declarada en la clase elfo (tal vez la usaste de prueba pero habrá que comentarla/borrarla o declararla).
El primer punto que quiero tocar está en tus archivos de cabecera:
Código:
#include <iostream>
using namespace std;
#include <cstdlib> // versión C++ OK pero no se necesita
#include <stdlib.h> // versión C sale sobrando
¿y el include de string?
Lo necesario es que tengas:
Código:
#include <iostream>
#include <string>
using namespace std;
Siguiente punto:
Código:
int atacar();
int defender();
int abandonar();
int muerto();
int atacar_t();
int defender_t();
int muerto_t();
Lo correcto es que estos métodos retornen un entero. Ejemplo:
Código:
int elfo::defender(){
cout << nombre << " se puso en posicion defensiva..." << endl;
return 1;
}
Último punto y más importante:
En varios if's estás asignando y no comparando valores. Lo correcto:
Revisa el código y haz las correcciones necesarias para que funcione como esperas.
OJO: En el switch también has olvidado utilizar 'break'.
Saludos.