Array Objetos

Iniciado por Snarky, 19 Marzo 2017, 00:57 AM

0 Miembros y 1 Visitante están viendo este tema.

Snarky

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

MAFUS

¿Tienes declarado Vol antes de ArrayQueue?

Snarky

A que te refieres con que tengo Vol declarado antes que ArrayQueue? Perdona pero soy nuevo en C++ y no tengo mucha idea :-(

MAFUS

Antes de usar cualquier cosa, c++ debe saber qur existe. Igual que declaras las variables antes de usarlas
Código (c++) [Seleccionar]
int a;
a = 3;

los tipos también deben existir antes de usarlos
Código (c++) [Seleccionar]
class Vol {
    // ...
};

class ArrayQueue {
    private:
        int MAX_QUEUE =100;
        std::vector<Vol> data = std::vector<Vol>(100);
        // ...
};

Snarky

Sisi, tengo declarada la clase Vol con el .h y el .cpp, pero igualmente me da error. No entiendo que es lo que falla...

Snarky

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;
   
   
}


MAFUS

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.

Snarky

Eso era! Muchisimas gracias!

MAFUS