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.
||=== 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.