Таким образом, я получаю следующие ошибки:проблемы пространств имен
..\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
На этой линии (среди прочих):
std::vector<RadiantFlux::Attack> attacks;
Здесь находятся соответствующие файлы:
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_ */
Почему я получаю эти ошибки и что могу сделать, чтобы исправить их? Я предполагаю, что это имеет какое-то отношение к пространствам имен ...
Если я делаю это я получаю сообщение об ошибке:».. \ Actor.h: 26: ошибка: опережающее объявление о' STRUCT RadiantFlux :: Attack» – cactusbin
Я не думаю, что параметр шаблона может быть объявлением вперед? Я думаю, что Актер должен быть объявлен в атаке вместо этого. Но, вернее, я думаю, что, возможно, есть другой способ разработки, чтобы зависимости были линейными, а не циклическими. – Kevin
@cactusbin: вам нужно переслать-объявить 'Actor' для' Attack', а не наоборот (зачем вам нужна эта зависимость?). –