I have an error that goes like this
    In file included from Level.hpp:12,
                 from main.cpp:4:
Corridor.hpp: In method `void Game::Corridor::update()':
Corridor.hpp:41: invalid use of undefined type `class Game::Level'
Corridor.hpp:13: forward declaration of `class Game::Level'
Corridor.hpp:42: invalid use of undefined type `class Game::Level'
Corridor.hpp:13: forward declaration of `class Game::Level'
Corridor.hpp:43: invalid use of undefined type `class Game::Level'
Corridor.hpp:13: forward declaration of `class Game::Level'
Corridor.hpp:44: invalid use of undefined type `class Game::Level'
Corridor.hpp:13: forward declaration of `class Game::Level'
Corridor and Level are ...
  // Corridor.hpp
#ifndef GAME_CORRIDOR_HPP
#define GAME_CORRIDOR_HPP
#include <Moot/Math.hpp>
//#include <Level.hpp>
#include <GameWindow.hpp>
namespace Game
{
    class Level; // <-- LINE 13
    class Corridor
    {
        static const unsigned int defaultLevelDepth = 800;
        Moot::Math::Vector3D wp1, wp2, wp3, wp4;
        Moot::Math::Vector2D sp1, sp2, sp3, sp4;
        Level * p_level;
    public:
        Corridor(Moot::Math::Vector3D setFirstPoint, Moot::Math::Vector3D setSecondPoint) 
        {
            wp1 = setFirstPoint;
            wp2 = setSecondPoint;
            wp3 = setFirstPoint;
            wp3.z += defaultLevelDepth;
            wp4 = setSecondPoint;
            wp4.z += defaultLevelDepth;
        }
        void update() {
            sp1 = p_level->getLevelCamera().convert3DVectorWithScreenAlgorithm(wp1); // <- LINE 41 etc.
            sp2 = p_level->getLevelCamera().convert3DVectorWithScreenAlgorithm(wp2);
            sp3 = p_level->getLevelCamera().convert3DVectorWithScreenAlgorithm(wp3);
            sp4 = p_level->getLevelCamera().convert3DVectorWithScreenAlgorithm(wp4);
            //p_level->getLevelCamera();
        }
        void draw()//const
        {
            Moot::Color tempColor;
            windowInstance().graphics().drawQuad( sp1.x, sp1.y, tempColor,
                                                                                sp2.x,sp2.y, tempColor,
                                                                                sp3.x, sp3.y, tempColor,
                                                                                sp4.x,sp4.y, tempColor, 1);
        }
        void setLevel(Level* setLevel) {
            p_level = setLevel;
        }
    };
}
#endif
and
// Level.hpp
#ifndef GAME_LEVEL_HPP
#define GAME_LEVEL_HPP
#include <Moot/Forward.hpp>
#include <Moot/Window.hpp>
#include <Moot/Math.hpp>
#include <GameWindow.hpp>
#include <Camera.hpp>
#include <Corridor.hpp>
#include <Player.hpp>
#include <vector>
namespace Game
{
    class Level
    {
        typedef Corridor* p_corridor;
        typedef std::vector<p_corridor> CorridorList;
        typedef CorridorList::reverse_iterator ReverseCorridorItter;
        CorridorList m_map;
        Camera       m_camera;
        Player         m_player;
    public:
        Level()
        {
            m_player.setLevel(this);
            // Lots of vertices being defined into m_map.
            // Loop through and set camera
            ReverseCorridorItter rit;
            for(rit = m_map.rbegin(); rit != m_map.rend(); rit++)
                (*rit)->setLevel(this);
        }
        ~Level()
        {
            ReverseCorridorItter rit;
            for(rit = m_map.rbegin(); rit != m_map.rend(); rit++) 
                delete (*rit);
            m_map.clear();
        }
        void update() 
        {
            // Temp delete when input and player are implimented.
            if(pad[0].buttons & PAD_UP)
                m_camera.updateTargetOffsets(0, -2);
            if(pad[0].buttons & PAD_DOWN)
                m_camera.updateTargetOffsets(0, 2);
            if(pad[0].buttons & PAD_LEFT)
                m_camera.updateTargetOffsets(-2, 0);
            if(pad[0].buttons & PAD_RIGHT)
                m_camera.updateTargetOffsets(2, 0);
            m_player.update();
            ReverseCorridorItter rit;
            for (rit = m_map.rbegin(); rit != m_map.rend(); rit++)
                (*rit)->update();
        }
        void draw() // const // EH!!! wtf ReverseIter isn't a member
        {
            m_player.draw();
            ReverseCorridorItter rit;
            for (rit = m_map.rbegin(); rit != m_map.rend(); rit++)
                (*rit)->draw();
        }
        Camera& getLevelCamera() {
            return m_camera;
        }
    };
}
#endif
The pointer is being set as far as I can tell, but when I try to access a function from Level, BOOM!
Thanks.
PS: The compiler is gcc 2.95.2 if that makes a difference.
EDIT
Updated with complete code.
 
     
    