C ++ не называет типу - PullRequest
       21

C ++ не называет типу

0 голосов
/ 02 октября 2010

Это может быть простой вопрос, но я не могу понять, почему компилятор выдает мне эту ошибку.У меня есть два класса.Агент и Окружающая среда.Когда я пытаюсь добавить объект типа Agent в свой класс Environment, я получаю Agent не называет ошибку типа.Я включаю Agent.h в свой класс Environment.h

#ifndef AGENT_H_INCLUDED
#define AGENT_H_INCLUDED

#include <vector>
#include <iostream>
#include "Environment.h"

using namespace std;

class Agent{
    public:
        Agent(bool s);
        vector<int> getPercept();
        void setPercept(vector<int> p);
        void goForward();
        void turnRight();
        void turnLeft();
        void clean();
        void paint();
        void refuel();
        bool needsRefuel();
        void turnOn();
        void turnOff();
        bool isActive();
        void move();
        int getCurX();
        int getCurY();
        char getCurDir();
        void setCurrentPosition(int x, int y, char d);


    private:
        vector<int> percept;
        int actions;
        int performance;
        char direction;
        bool isOn;
        int curX;
        int curY;
        char curDir;
};

#endif // AGENT_H_INCLUDED

/ ************************* /

#ifndef ENVIRONMENT_H_INCLUDED
#define ENVIRONMENT_H_INCLUDED

#include <vector>
#include <iostream>
#include "Agent.h"

using namespace std;


class Environment{
    public:

        Environment(vector<vector<char> > roomData);
        Environment(vector<vector<char> > roomData, vector<int> status);
        void setRoomData(vector<vector<char> > roomData);
        bool isSimulationComplete();
        void isAgentHome();
        vector<int> sendLocationStatus();
        void printEnvironment();
        void setAgentHome(int x, int y);
        vector<int> getAgentPercept();
        void setAgentPercept(vector<int> status);
        void setAgentPosition(int x, int y, char p);
        vector<int> sendAgentPercept();
        void calculateAgentPercept();


    private:
        vector<vector<char> > room;
        vector<int> agentPercept;
        bool simulationComplete;
        int agentHomeX;
        int agentHomeY;
        int agentX;
        int agentY;
        char agentDir;
        Agent agent;   ////ERROR IS HERE
};

#endif // ENVIRONMENT_H_INCLUDED

Ответы [ 2 ]

4 голосов
/ 02 октября 2010

Ваш agent.h включает environment.h. Файл agent.h анализируется по порядку сверху вниз, поэтому, когда анализируется environment.h, компилятор не знает, что такое Agent. Похоже, что нет причин для включения environment.h в agent.h.

1 голос
/ 02 октября 2010

Помимо того, что уже сказано в комментариях, вы не можете иметь два заголовочных файла, включающих друг друга. Для Agent.h нет никаких причин включать Environment.h, поэтому, если файл .cpp сначала включает Agent.h, он потерпит неудачу (поскольку сначала он будет проходить через Environment.h, для которого требуется Agent).

Если у вас возникла ситуация, когда два заголовочных файла зависят от определений друг друга, используйте предварительные объявления, где это возможно, или разбейте заголовочные файлы на несколько заголовочных файлов.

...