0

Este es mi codigo fuente, necesito guardar datos como en una agenda, lo dirijo a un archivo de word y despues me debe entregar toda la informacion que agregué pero me salen errores asi:

[Error] expected primary-expression before '.' token en la linea 40, 42, 44, 46, 49, 51, 53. Ayudenme por favor, no estoy entiendo bien con esto de las clases en linea :c Tenía mas errores pero ya logré resolverlos :p Aún asi, ayudenme a entender que es ese error que me esta marcando en todos los cin.getline, por favor, la tengo que entregar pronto :c

//Ejercicio agenda
#include<iostream>
#include<conio.h>
#include<fstream>
#include<string.h>
#include<clocale>
using namespace std;
typedef struct
{
    int dia,mes,anyo;
}fecha;
typedef struct
{
    string nombre;
    string apellido1;
    string apellido2;
    unsigned long telefono;
    fecha fecha_nacimiento;
}ficha;
int main()
{
    setlocale(LC_CTYPE,"Spanish");
    int des;
    INICIO:
        system("cls");
        cout<<"Menu de opciones:"<<endl;
        cout<<"Presiona 1 para generar un nuevo archivo"<<endl;
        cout<<"Presiona 2 para abrir un archivo existente"<<endl;
        cout<<"Presiona 3 para salir"<<endl;
        cin>>des;
        switch(des)
        {
            case 1:
                system("cls");
                cout<<"Decidiste generar un nuevo archivo:"<<endl;
                cout<<"\nIntroduce la informacion que se te solicita:"<<endl;
                ofstream AGENDA;
                AGENDA.open("Agenda.doc",ios::app);
                cout<<"\nNombre: ";
            cin.getline(ficha.nombre)
            cout<<"\nApellido paterno: ";
            cin.getline(ficha.apellido1);
            cout<<"\nApellido materno: ";
            cin.getline(ficha.apellido2);
            cout<<"\nTelefono: ";
            cin.getline(ficha.telefono);
            cout<<"Fecha de nacimiento:"<<endl;
            cout<<"\nDia: ";
            cin.getline(ficha.fecha_nacimiento.dia);
            cout<<"\nMes: ";
            cin.getline(ficha.fecha_nacimiento.mes);
            cout<<"\nAño: ";
            cin.getline(ficha.fecha_nacimiento.anyo);
            AGENDA.close();
            goto INICIO;
            break;:
        case 2:
            system("cls");
            fstream AGENDA1;
            char cadena[1000000];
            AGENDA1.open("Agenda.doc",ios::in);
            while(AGENDA1.getline(cadena,1000000)!=NULL)
                {
                    cout<<cadena<<endl;
                }
            AGENDA1.close();
            goto INICIO;
            break;:
        case 3:
            system("cls");
            cout<<"Decidiste salir, adios :)"<<endl;
            break;:
        default:
            system("cls");
            cout<<"Por favor, introduce una opcion valida"<<endl;
            system("PAUSE");
            goto INICIO;
            break;
    }
system("PAUSE");
return(0);
}

1 Answers1

0

Estás confundiendo tipos con instancias.

Podemos decir que un tipo de datos son los planos de un objeto, mientras que una instancia de datos es el objeto en si.

  • Tipo de dato Coche:

  • Montones de instancias de Coche:


En tu caso el tipo es ficha pero no existe ninguna instancia, por lo que no puedes acceder a sus variables miembro de la misma manera que no puedes encender el motor del plano de un coche o inflarle las ruedas. Seguramente querías hacer esto:

ficha f;

cin.getline(f.nombre)

cout<<"\nApellido paterno: ";
cin.getline(f.apellido1);

cout<<"\nApellido materno: ";
cin.getline(f.apellido2);

cout<<"\nTelefono: ";
cin.getline(f.telefono);

cout<<"Fecha de nacimiento:"<<endl;
cout<<"\nDia: ";
cin.getline(f.fecha_nacimiento.dia);

cout<<"\nMes: ";
cin.getline(f.fecha_nacimiento.mes);

cout<<"\nAño: ";
cin.getline(f.fecha_nacimiento.anyo);

El objeto f es una instancia de ficha.

Otras cosas a tener en cuenta.

  • Las cabeceras <conio.h> y <string.h> pertenecen a y no deben ser usadas en , lee este hilo para saber más del tema.
  • En C++ las estructuras son tipos fundamentales, no necesitas anteponer struct al nombre para usarlas ni necesitas hacer un alias de tipo (typedef) como atajo.
  • Intenta no abusar de std::endl, lee este hilo para saber más del tema.
  • Deja a tu código respirar. Si apelotonas el código no harás que sea más guay, harás que sea más difícil de leer.
  • No uses etiquetas ni goto.
  • Evita llamadas innecesarias a std::cout, la mayoría de llamadas contiguas pueden ser unidas en una.

Siguiendo esos consejos, tu código podría quedar así:

struct fecha
{
    int dia,mes,anyo;
};

struct ficha
{
    string nombre;
    string apellido1;
    string apellido2;
    unsigned long telefono;
    fecha fecha_nacimiento;
};

int main()
{
    setlocale(LC_CTYPE,"Spanish");
    int des;

        system("cls");
        cout << "Menu de opciones:\n"
            "Presiona 1 para generar un nuevo archivo\n"
            "Presiona 2 para abrir un archivo existente\n"
            "Presiona 3 para salir" << endl;
        cin >> des;

        switch(des)
        {
            case 1:
                system("cls");
                cout << "Decidiste generar un nuevo archivo:\n\n"
                    << "Introduce la informacion que se te solicita:" << endl;


// ...
// ...
// ...
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82