Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Snarky en 19 Marzo 2017, 00:57



Título: Array Objetos
Publicado por: Snarky en 19 Marzo 2017, 00:57
Estoy haciendo un programa para que almacene los datos de un Objeto Vol, pero me da un error al crear el Vector que almacena objetos de tipo Vol. Alguien me podria decir donde esta el fallo? La clase Vol la tengo declarada con sus atributos.

Error: 'Vol' was not declared in this scope

class ArrayQueue{
    private:
        int MAX_QUEUE =100;
        std::vector<Vol> data = std::vector<Vol>(100); ----> Aqui salta el error
        
        int front; // apunta al primer element de la cua
        int rear; // apunta al darrer element de la cua
      

        
    public:
        ArrayQueue(); // inicialitza una cua, buida
        bool empty (); // indica si la cua és buida
        bool full (); // indica si la cua és plena

};
#endif


Título: Re: Array Objetos
Publicado por: MAFUS en 19 Marzo 2017, 02:22
¿Tienes declarado Vol antes de ArrayQueue?


Título: Re: Array Objetos
Publicado por: Snarky en 19 Marzo 2017, 10:00
A que te refieres con que tengo Vol declarado antes que ArrayQueue? Perdona pero soy nuevo en C++ y no tengo mucha idea :-(


Título: Re: Array Objetos
Publicado por: MAFUS en 19 Marzo 2017, 10:32
Antes de usar cualquier cosa, c++ debe saber qur existe. Igual que declaras las variables antes de usarlas
Código
  1. int a;
  2. a = 3;
los tipos también deben existir antes de usarlos
Código
  1. class Vol {
  2.    // ...
  3. };
  4.  
  5. class ArrayQueue {
  6.    private:
  7.        int MAX_QUEUE =100;
  8.        std::vector<Vol> data = std::vector<Vol>(100);
  9.        // ...
  10. };


Título: Re: Array Objetos
Publicado por: Snarky en 19 Marzo 2017, 10:36
Sisi, tengo declarada la clase Vol con el .h y el .cpp, pero igualmente me da error. No entiendo que es lo que falla...


Título: Re: Array Objetos
Publicado por: Snarky en 19 Marzo 2017, 12:23
el .h

#ifndef VOL_H
#define VOL_H
#include<iostream>
using namespace std;
#include "ArrayQueue.h"

class Vol {
public:
    
    Vol(std::string  , std::string, std::string, std::string, std::string, std::string);
    
    
    void setcodi (int codi);
    void setnumVol (int numVol);
    void sethSortida (int hSortida);
    void sethArribada (int hArribada);
    void setcodiSortida (int codiSotida);
    void setcodiArribada (int codiArribada);
    
    string getcodi ();
    int getnumVol();
    int gethSortida();
    int gethArribada();
    int getcodiSortida();
    string getcodiArribada();
    
    
private:
    string codi;
    string numVol;
    string hSortida;
    string hArribada;
    string codiSortida;
    string codiArribada;
    
};

#endif /* VOL_H */

-----------------------------------------------------------------------------------------------

y el .cpp

#include "Vol.h"
#include <iostream>
#include <cmath>
using namespace std;


Vol::Vol (const Vol& orig) {
}

Vol::Vol(std::string _codi, std::string _numVol, std::string _hSortida, std::string _hArribada, std::string _codiSortida, std::string _codiArribada)


{

    codi = _codi;
    numVol = _numVol;
    hSortida = _hSortida;
    hArribada = _hArribada;
    codiSortida = _codiSortida;
    codiArribada = _codiArribada;
    
    
}



Título: Re: Array Objetos
Publicado por: MAFUS en 19 Marzo 2017, 13:30
He aquí el fallo.

En vol.h, está el include ArrayQueue.h. Esto te incrusta el fuente de la clase que te lanza el error, la línea que has marcado en tu primer post, y por tanto aparece el uso del tipo de dato Vol antes de su declaración.

¿De todas formas haces uso de la clase ArrayQueue dentro de Vol?
Si no la vas a usar deberías borrar ese include.
Si la vas a usar deberías pensar en crear un tipo de dato común a las dos clases para evitar que se referencien mutuamente.


Título: Re: Array Objetos
Publicado por: Snarky en 19 Marzo 2017, 16:07
Eso era! Muchisimas gracias!


Título: Re: Array Objetos
Publicado por: MAFUS en 19 Marzo 2017, 22:07
De res, home!