Canales populares

[Ayuda] Me tira cierto error al intentar usar template

Hola gente!
Les quiero comentar que necesito ayuda con un ejercicio que consiste en crear un menu para agregar y consultar libros en una biblioteca, borre gran parte del codigo, que igual me ando bien, pero solo trate de subir la parte donde me surje el problema, para no ser muy pesado y cansar la vista al pedo, aclaro que uso eclipse luna.
La parte en naranja son las lineas donde me aparece "x" en el costado, y me tira este error
" could not convert '(Data*)(& libros)' from 'Data*' to 'Data' " , la verdad no lo entiendo porque en ningun momento trate de convertir algo.
Les agradesco de ante mano



#include <iostream>
#include <string.h>
#include <cstdlib>
#include <iomanip>
#include <stdlib.h>
#include <Cocuments and Settingsramirosabetrabajo practico 1srctemplates>

#define TAM 500

using std::cout;
using std::cin;
using std::endl;
using std::string;

struct Data {
string titulo, autor, tema_libro;
int codigo;
};
void ordenarxtitulo( Data , Data);
void ordenarxcodigo( Data , Data );
void xcogido(Data , int );
void xtitulo (Data , int );
Data AgregarLibro();

int main()
{
int cant_total = 0;
Data libros[TAM];



int opcion;
globo:
cout << " 1) Agregar nuevo libro." << endl;
cout << " 2) Mostrar todos los libros ordenados por código." << endl;
cout << " 3) Mostrar todos los libros ordenados por título." << endl;

cout << " 7) Salir."<<endl;

cout << endl;
cout << " OPCION SELECCIONADA: ";
cin >> opcion;


switch (opcion){


case 1: system("cls"; agregar(libros,cant_total,AgregarLibro, TAM) ; cout << endl; system ("PAUSE"; goto globo; break;
case 2: system("cls"; ordenar(libros, cant_total, ordenarxcodigo ); xcogido(libros,cant_total) ; cout << endl; system ("PAUSE"; goto globo; break;
case 3: system("cls"; ordenar(libros, cant_total, ordenarxtitulo ); xtitulo(libros,cant_total) ; cout << endl; system ("PAUSE"; goto globo; break;


case 7: return 0;
default: cout << endl; system ("PAUSE"; goto globo; break;

}

return 0;
}

Data AgregarLibro()
{
Data p;
cout<<"ingrese codigo: ";
cin>>p.codigo;
cin.ignore();cout<<endl;
cout<<"ingrese titulo: ";
getline(cin, p.titulo); cout<<endl;
cout<<"ingrese autor: ";
getline(cin, p.autor);cout<<endl;
cout<<"ingrese tema de libro: ";
getline(cin, p.tema_libro);
return p;
}


void ordenarxcodigo(Data k, Data r)
{
int aux;
if(r.codigo>k.codigo)
{
aux = k.codigo;
k.codigo = r.codigo;
r.codigo = aux;
}
}
void ordenarxtitulo(Data k, Data r)
{
string aux;
if((r.titulo.compare(k.titulo))>0)
{
aux = k.titulo;
k.titulo = r.titulo;
r.titulo = aux;
}
}

void xcogido(Data k[],int t)
{
for ( int i = 0 ; i < t ; i++){
cout<<" "<<" "<<k.codigo<<endl;
}
}
void xtitulo (Data k[], int t)
{
Data p;
for ( int i = 0 ; i < t ; i++){
cout<<" "<<" "<<k.titulo<<endl;
}
}


DESDE ACA ABAJO ESTA EN UN ARCHIVO DE ESCRITURA QUE LO INCLUYO EN EL INCLUDE AL PRINCIPIO DEL PROGRAMA, obviamente me reconoce al llamar a la funcion "ordenar"




#include <iostream>
#include <string.h>


using std::cout;
using std::cin;
using std::endl;
using std::string;


template <typename T > void agregar ( T v[], int &t, T(*agregar_datos)(),int tam)
{
if ( t == tam){
cout<<"has alcanzado a la cantidad maxima de libros, lo siento."<<endl;
}
else
{
v[t] = agregar_datos();
t++;
}

}


template < typename T > void ordenar ( T v[], int t, void (*ordenar_datos)(T,T))
{
for(int i=1; i<=t; i++)
{
for(int j=0; j<t-1; j++)
{
ordenar_datos(v[j], v[j+1]);
}
}

}
0
0
0
0No hay comentarios