Así que estoy consiguiendo los errores siguientes:problemas de espacio de nombres
..\Actor.h:35: error: `Attack' is not a member of `RadiantFlux'
..\Actor.h:35: error: template argument 1 is invalid
..\Actor.h:35: error: template argument 2 is invalid
..\Actor.h:35: error: ISO C++ forbids declaration of `attacks' with no type
En esta línea (entre otros):
std::vector<RadiantFlux::Attack> attacks;
Aquí están los ficheros relevantes:
Actor.h:
#ifndef ACTOR_H_
#define ACTOR_H_
#include <string>
#include <vector>
#include "Attack.h"
namespace RadiantFlux {
...
class Actor {
private:
std::string name;
int health;
std::vector<RadiantFlux::Attack> attacks;
Attributes attributes;
public:
...
};
}
#endif /* ACTOR_H_ */
Attack.h:
#ifndef ATTACK_H_
#define ATTACK_H_
#include <string>
#include <stdlib.h>
#include <time.h>
#include "Actor.h"
namespace RadiantFlux {
...
class Attack {
private:
...
public:
...
};
}
#endif /* ATTACK_H_ */
¿Por qué recibo estos errores y qué puedo hacer para solucionarlos? Supongo que tiene algo que ver con los espacios de nombres ...
Si hago esto me da un error:" .. \ Actor.h: 26: error: declaración adelantada de' struct RadiantFlux :: Ataque '" – cactusbin
No creo que un parámetro de plantilla pueda ser una declaración directa, ¿o sí? Creo que el Actor debería ser declarado en ataque en su lugar. Pero, en verdad, creo que probablemente haya una forma diferente de diseñar para que las dependencias sean lineales en vez de cíclicas. – Kevin
@cactusbin: Necesita reenviar-declarar 'Actor' para' Ataque', no viceversa (¿por qué necesita esta dependencia, de todos modos?). –