This is a exam of 2nd of Telecomunications Engeniering, I've done the exam of another year, but I can't find the solution to te following two mistakes:
1st)
error C2248: 'revision::dni' : cannot access private member declared in class 'revision' line 46
2nd)
error C2248: 'revision::fecha' : cannot access private member declared in class 'revision' line 60
#include <iostream>
usingnamespace std;
#include <stdio.h>
class revision
{
long dni;//Almacena el número de DNI del cliente sin letra.
char fecha[15];//Se almacena como cadena de caracteres la fecha de la revisión
int kilometros;//Kilometros recorridos hasta la fecha de revisión
double coste;//Almacena el precio de la revisión.
public:
void pedirdatos(void);
void visualizar(void)
{
cout<<"DNI = "<<dni<<endl;
cout<<"Fecha ="<<fecha<<endl;
cout<<"Kilometros = "<<kilometros<<endl;
cout<<"Coste = "<<coste<<endl;
}
};
dni is a private data member and can't be accessed outside the class object, i.e. Main() cannot access it. If you need access to it outside the class you would need to create getters and setters.
class revision
{
long dni;//Almacena el número de DNI del cliente sin letra.
char fecha[15];//Se almacena como cadena de caracteres la fecha de la revisión
int kilometros;//Kilometros recorridos hasta la fecha de revisión
double coste;//Almacena el precio de la revisión.
public:
void pedirdatos(void);
void visualizar(void)
{
cout << "DNI = " << dni << endl;
cout << "Fecha =" << fecha << endl;
cout << "Kilometros = " << kilometros << endl;
cout << "Coste = " << coste << endl;
}
// setters/getters
void setDni(long);
long getDni();
};
void revision::setDni(long val)
{
dni = val;
}
long revision::getDni()
{
return dni;
}
// .... reset of code
//taller.h
#include <iostream>
usingnamespace std;
#include <stdio.h>
class revision
{
long dni;//Almacena el número de DNI del cliente sin letra.
char fecha[15];//Se almacena como cadena de caracteres la fecha de la revisión
int kilometros;//Kilometros recorridos hasta la fecha de revisión
double coste;//Almacena el precio de la revisión.
public:
void pedirdatos(void);
void visualizar(void)
{
cout<<"DNI = "<<dni<<endl;
cout<<"Fecha ="<<fecha<<endl;
cout<<"Kilometros = "<<kilometros<<endl;
cout<<"Coste = "<<coste<<endl;
}
long getDni();
char getFecha();
};
//main.cpp
#include "taller.h"
int main()
{
int option = 0;
int n = 0;
cout<<"Numero de revisiones = ";
cin >> n;
revision *lista = new revision[n];
int pasada= 0;
while(1)
{
cout<<"\n\t\t***MENU***\n";
cout<<"1)Agregar nueva revision"<<endl;
cout<<"2)Buscar por DNI"<<endl;
cout<<"3)Buscar por fecha"<<endl;
cout<<"4)Mostrar base de datos"<<endl;
cout<<"5)Salir\n";
cout<<"->OPCION ==> ";
cin>>option;
if((option != 1)&&(option != 2)&&(option != 3)&&(option != 4)&&(option != 5))
{
system("cls");
cout<<"No se contempla esa opción";
exit(0);
}
elseif((option == 1))
{
system("cls");
lista[pasada].pedirdatos();
pasada += 1;
}
elseif((option == 2))
{
system("cls");
int DDNNII;
cout<<"Introduzca DNI del cliente = ";
cin>>DDNNII;
for (int i =0;i<n;i++)
{
if (lista[i].getDni() == DDNNII)
{
lista[i].visualizar();
}
}
}
elseif((option == 3))
{
system("cls");
char FFEECCHHAA[15];
cout<<"Introduzca fecha de revision = ";
gets(FFEECCHHAA);
for (int i =0;i<n;i++)
{
if (lista[i].getFecha() == FFEECCHHAA[15])//////////////
{
lista[i].visualizar();
}
}
}
elseif((option == 4))
{
system("cls");
for (int i = 0;i<n;i++)
{
lista[i].visualizar();
}
}
elseif((option == 5))
{
system("cls");
cout<<"EXIT";
exit(0);
}
}
}
/*NOTA: LA CLAVE ESTÁ EN ENTENDER QUE ESTAMOS TRABAJANDO
EL RECUADRO ROJO DE LA 5ª CARA DEL RESUMEN.*/
If you are referring to it skipping when asking for Fecha, then its because cin leaves the newline character in the stream - adding cin.ignore() to the next line clears/ignores the newline from the stream and will correct the problem.