Ошибка: строка 12 из Cell.h: необъявленный идентификатор «Актер».
Если я пытаюсь форвард объявить выше, он говорит, что есть переопределение. Что я делаю?
Actor.h:
#ifndef ACTOR_H
#define ACTOR_H
#include <iostream>
#include <vector>
#include <string>
#include "Cell.h"using namespace std;
class Actor //Simple class as a test dummy.
{
public:
Actor();
~Actor();
};
#endif
Cell.h:
#include <iostream>
#include <string>
#include <vector>
#include "Actor.h"#ifndef CELL_H
#define CELL_H
using namespace std;
class Cell // Object to hold Actors.
{
private:
vector <Actor*> test;
public:
Cell();
~Cell();
vector <Actor*> getTest();
void setTest(Actor*);
};
#endif
Cell.cpp:
#include "Cell.h"#include <vector>
vector<Actor*> Cell::getTest() //These functions also at one point stated that
{ // they were incompatible with the prototype, even
} // when they matched perfectly.
void Cell::setTest(Actor*)
{
}
Что еще я могу сделать?
У вас рекурсивный #include
через ваши взаимные ссылки между cell.h
а также actor.h
,
В Cell.h
, удалять #include <Actor.h>
,
В Cell.h
, добавьте строку class Actor;
чуть выше определения class Cell
,
В Cell.cpp
, вы может быть нужно добавить #include "Actor.h"
,
Удалить #include "Cell.h"
от Actor.h
и вы готовы идти.
В общем, предпочитайте предварительные декларации, где вы можете, и включает, где вы должны. Я также заменил бы #include "Actor.h"
от Cell.h
с предварительной декларацией: class Actor;
,
в cpp
файлы, которые вы можете включить заголовки, если они вам нужны.