私はこのコードで立ち往生しています。オブジェクトの配列を属性として持つクラスを宣言する必要があり、このオブジェクトも前のクラスを属性として持ちます。
エラー: 不完全な型 'struct Tarjeta' の無効な使用 エラー: 'struct Tarjeta' の前方宣言 |
Tarjeta.h
#include "../include/Categoria.h"
class Tarjeta{
public:
~Tarjeta();
//constructor por defecto
Tarjeta();
//constructor parametrizado
Tarjeta(string);
//Función para asignar categoria a la tarjeta
void asignarCategoria(Categoria);
//Función que devuelve la categoría en la que está incluida la tarjeta
Categoria obtenerCategoria();
void desAsignar();
protected:
Categoria categoria;
string descripcion;
//identificador booleano para distinguir si una tarjeta del estudo ha sido asignada a una categoria
bool asiganda;
private:
};
Tarjeta.cpp
#include "../include/Tarjeta.h"
Tarjeta::~Tarjeta()
{
//dtor
}
/** @brief desAsignar
*
* @todo: Funcion utlizada para sacar una tarjeta de una categoria
*/
void Tarjeta::desAsignar(){
categoria=NULL;
}
/** @brief obtenerCategoria
*
* @todo: devuelve la categoria en la que esta incluida la tarjeta
*/
Categoria Tarjeta::obtenerCategoria(){
return categoria;
}
/** @brief asignarCategoria
*
* @todo: asigna una categoria a la tarjeta
*/
void Tarjeta::asignarCategoria(Categoria cat){
categoria=cat;
asiganda=true;
}
/** @brief Tarjeta
*
* @todo: constructor parametrizado.
* inicalizamos categoria a null para da la posibilidad de crear tarjetas sin
*/
Tarjeta::Tarjeta(string des):descripcion(des){
categoria=NULL;
}
/** @brief Tarjeta
*
* @todo: constructor por defecto
*/
Tarjeta::Tarjeta(){
categoria=NULL;
descripcion="";
}
カテゴリ.h
#ifndef CATEGORIA_H
#define CATEGORIA_H
#include <string>
#define MAXTARJETAS 50
using namespace std;
//declaracion adelantada de Tarjeta para poder utilzarla en la clase Categoria
class Tarjeta;
class Categoria
{
public:
virtual ~Categoria();
//Constructor por defecto de la clase Categoria
Categoria();
//construcotr parametrizado de la clase Categoria
Categoria(string,string);
//Función que inicializa el arrayTarjetas poniendo las todas a null
void incializaArrayTarjetas();
//Función que introduce una nueva tarjeta en la coleccion de tarjetas
void introducirTarjeta(Tarjeta);
//Busca en el array de tarjetas la tarjeta en cuestion y la devuelve. Si llega al final y no encuentra nada devuelve nill
Tarjeta consultaTarjeta(string);
//Busca en el array de tarjetas y la elimina del array, no del estudio
void elminarTarjeta(string);
protected:
string nombre;
string descripcion;
Tarjeta *arrayTarjetas;
private:
};
#endif // CATEGORIA_H
カテゴリ.cpp
#include "../include/Categoria.h"
#include <string>
#define MAXTARJETAS 50
using namespace std;
/** @brief elminarTarjeta
*
* Busca en el array de tarjetas y la elimina del array, no del estudio
*/
void Categoria::elminarTarjeta(string descripcion)
{
int i=0;
bool encontrado=false;
while(arrayTarjetas[i].descripcion!=descripcion && i<MAXTARJETAS){
i++;
}
if(arrayTarjetas[i].descripcion==descripcion){
encontrado=true;
}
int j=i+1;
while(i<MAXTARJETAS){
if(j<MAXTARJETAS){
arrayTarjetas[i]=arrayTarjetas[j];
}
i++;
j++;
}
if(encontrado){
arrayTarjetas[MAXTARJETAS-1]=NULL;
}
}
/** @brief consultaTarjeta
*
* Busca en el array de tarjetas la tarjeta en cuestion y la devuelve. Si llega al final y no encuentra nada devuelve null
*/
Tarjeta Categoria::consultaTarjeta(string descripcion)
{
int i=0;
while(arrayTarjetas[i].descripcion!=descripcion && i<MAXTARJETAS){
i++;
}
if(arrayTarjetas[i].descripcion==descripcion){
return arrayTarjetas[i];
}
return NULL;
}
/** @brief introducirTarjeta
*
* Función que introduce una nueva tarjeta en la coleccion de tarjetas
* introduciremos la tarjeta en la primera posición libre que encontremos en el array
*/
void Categoria::introducirTarjeta(Tarjeta tarjeta)
{
for(int i=0;i<MAXTARJETAS;i++){
if(arrayTarjetas[i]==NULL){
arrayTarjetas[i]=tarjeta;
//la tarjeta que introducimos le asignamos la categoria
//tarjeta.asignarCategoria(this); Lo hacemos en el main
break;
}
}
}
/** @brief incializaArrayTarjetas
*
* Función que inicializa el arrayTarjetas poniendo las todas a null
*/
void Categoria::incializaArrayTarjetas()
{
for(int i=0;i<MAXTARJETAS;i++){
arrayTarjetas[i]=NULL;
}
}
/** @brief Categoria
*
* constructor parametrizado de la clase Categoria
* creamos el array vacio y lo inicializamos de esta
* forma podemos empezar a meter tarjetas en las diferentes categorias
*/
Categoria::Categoria(string nom, string des):nombre(nom),descripcion(des){
arrayTarjetas=new Tarjeta[MAXTARJETAS];
incializaArrayTarjetas();
cout<<"Constructor categoria"<<endl;
}
/** @brief Categoria
*
* Constructor por defecto de la clase Categoria
*/
Categoria::Categoria()
{
nombre="";
descripcion="";
arrayTarjetas=new Tarjeta[MAXTARJETAS];
incializaArrayTarjetas();
cout<<"constructor categoria"<<endl;
}
/** @brief (one liner)
*
* (documentation goes here)
*/
Categoria::~Categoria()
{
delete arrayTarjetas;
}