Acceder al primer elemento de un std::set c++

Z

Tengo esta clase

#ifndef AUTOR_H
#define AUTOR_H
#include "cadena.h"
class Autor{
	public:
		Autor(Cadena n,Cadena a,Cadena d):nombre_(n),apellidos_(a),direccion_(d){}
		Cadena nombre()const{ return nombre_;}
		Cadena apellidos()const{ return apellidos_; }
		Cadena direccion()const{ return direccion_;}
	private:
		Cadena nombre_;
		Cadena apellidos_;
		Cadena direccion_;
};
#endif

y esta otra

#ifndef ARTICULO_H
#define ARTICULO_H
#include "fecha.h"
#include "cadena.h"
#include <iomanip>
#include <set>
#include "autor.h"
class Articulo{
	public:
		typedef std::set<Autor*> Autores;
		Articulo(Autores aut,Cadena ref,Cadena t,Fecha f,double p);
		Cadena referencia()const;
		Cadena titulo()const;
		Fecha f_publi()const;
		double precio()const;
		double& precio();
		virtual void imp_esp(ostream& s)const=0;
		std::set<Autor*> autores()const;
	protected:
		Autores autores_;
		Cadena referencia_;
		Cadena titulo_;
		Fecha f_publi_;
		double precio_;
		
};
ostream& operator<<(ostream& s,const Articulo& art);
ostringstream& operator<<(ostringstream& s,const Articulo& art);

ahora en el operador de inserción quiero acceder al set de punteros a autor ,obteniendo el apellido de los objetos autor a los que apuntan los punteros,pero me da error,me dice que el iterador no tine un miembro llamado apellidos()

ostream& operator<<(ostream& s,const Articulo& art){
    //esto esta simplificado pero lo importante es esto
     for(Articulo::Autores::const_iterator it=art.autores().begin();it!=art.autores().end();++it){
		s<<it->apellidos()<<",";
	}
}

Usuarios habituales