Título: Problema con una lista simplemente enlazada en C++ Publicado por: Mike_EDD en 4 Septiembre 2017, 22:14 pm Buenas, resulta que tengo un problema con una lista simplemente enlazada en C++, me aparece el siguiente error:
||=== Build: Debug in Activity_3 (compiler: GNU GCC Compiler) ===| (en el main)||In function 'int main()':| (en el main)|19|error: no matching function for call to 'Exitos::insertData(int, int&)'| (en el main)|19|note: candidate is:| (la lista.h)|46|note: void Exitos::insertData(int&, const int&)| (la lista.h)|46|note: no known conversion for argument 1 from 'int' to 'int&'| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===| aqui dejo el codigo: //aqui esta el archivo de cabecera #ifndef (nombre del archivo.h)_H_INCLUDED #define (nombre del archivo.h)_H_INCLUDED #include<exception> //esto lo podemos omitir #include<iostream> class Exitos{ private: int data[50]; int last; public: void inicialize(); bool isEmpty(); bool isFull(); void insertData(int&, const int&); void deleteData(const int&); int getFirstPos(); int getLastPos(); int getPrevPos(const int&); int getNextPos(const int&); int finData(); int retrieve(const int&); }; void Exitos::inicialize() { last = -1; } bool Exitos::isEmpty() { return last == -1; } bool Exitos::isFull() { return last == 49; } void Exitos::insertData(int& p, const int& e) { if(isFull()){ //aqui va una excepcion, la podemos omitir } if(p < -1 || p > last){ //aqui va una excepcion, la podemos omitir } int i = last + 1; while(i > p){ data[i+1] = data; i--; } data[p+1] = e; last++; } void Exitos::deleteData(const int& p) { if(isFull()){ //aqui va una excepcion, la podemos omitir } if(p < -1 || p > last){ //aqui va una excepcion, la podemos omitir } int i = p; while(i < last){ data = data[i+1]; i++; } last--; } int Exitos::getFirstPos() { if(isEmpty()){ //aqui va una excepcion, la podemos omitir } return -1; } int Exitos::getLastPos() { return last; } int Exitos::getPrevPos(const int& p) { if(isEmpty() or p < 0 or p > last){ return -1; } return p-1; } int Exitos::getNextPos(const int& p) { if(isEmpty() or p < 0 or p > last - 1){ return -1; } return p+1; } int Exitos::finData() { //aqui va otra cosa pero lo podemos omitir return 0; } int Exitos::retrieve(const int& p) { if(p < 0 or p > last){ //aqui va una excepcion, la podemos omitir } return data[p]; } #endif //aqui esta el archivo .cpp #include "(el archivo).h" using namespace std; // iostream lo omito porque ya esta en la cabecera que cree int main() { Exitos uno; int mydatos, i; uno.inicialize(); for(i=0; i<20; i++){ mydatos = i; cout << "Insertando: " << mydatos << endl; uno.insertData(uno.getFirstPos(),mydatos); } cout << endl << endl << endl; } El error me da cuando quiero agregar la posición del elemento en insertData, estuve buscando en decenas de paginas y libros, pero todos los autores utilizan struct, en ninguna trabajan con programacion orientada a objetos, el unico error que me da es en el main, gracias por ayudar. Título: Re: Problema con una lista simplemente enlazada en C++ Publicado por: ivancea96 en 4 Septiembre 2017, 22:24 pm getFirstpos retorna un int. Como no lo guardas en ninguna variable, digamos que es un int ""volatil"" que va a desaparecer.
void Exitos::insertData(int& p, const int& e) Pides una referencia a int, "int&". Requiere que se le pase un valor "localizado en memoria", como puede ser una variable. Pasar directamente el retorno de la función no sirve. La pregunta aquí es: ¿Por qué necesitas que sea "int&"? Probablemente te sirva si pones "int" asecas. |