Hi, Code::Blocks keeps giving me this error message whenever I try to compile:

'LinkListIterator' does not name a type
I've checked for spelling errors in my preprocessor identifiers and header files, and made sure to include the appropriate header files in the implementation files. But I'm stumped and have no idea how to fix this. Any assistance will be appreciated. Thanks.

Code:
// UnorderedLinkList.h

# ifndef H_UnorderedLinkList
# define H_UnorderedLinkList

# include "LinkListIterator.h"

struct NodeType
{
    int info;
    NodeType *link;
};

class UnorderedLinkList
{
    public:        
        LinkListIterator begin();
        LinkListIterator end();
        UnorderedLinkList();        

    protected:
        int count;
        NodeType *first;
        NodeType *last;
};

# endif
Code:
// UnorderedLinkList.cpp

# include "UnorderedLinkList.h"
# include <iostream>
using namespace std;

LinkListIterator UnorderedLinkList::begin()
{
    LinkListIterator temp(first);

    return temp;
}


LinkListIterator UnorderedLinkList::end()
{
    LinkListIterator temp(NULL);

    return temp;
}

UnorderedLinkList::UnorderedLinkList()
{
    first = NULL;
    last = NULL;
    count = 0;
}
Code:
// LinkListIterator.h

#ifndef H_LinkListIterator
#define H_LinkListIterator

# include "UnorderedLinkList.h"

# include <iostream>
using namespace std;

class LinkListIterator
{
    public:
        LinkListIterator();
        LinkListIterator(NodeType *ptr);
        int operator*(); // function to overload the dereferencing operator
        LinkListIterator operator++();// overloads the preincrement operator
        bool operator==(const LinkListIterator& right)const; // overloads the equal to operator
        bool operator!=(const LinkListIterator& right)const; // overloads the not equal to operator

    private:
        NodeType *current; // pointer to point to the current node in the ll

};
#endif
Code:
// LinkListIterator.cpp

# include "LinkListIterator.h"

LinkListIterator::LinkListIterator()
{
    current = NULL;
}

LinkListIterator::LinkListIterator(NodeType *ptr)
{
    current = ptr;
}

int LinkListIterator::operator*()
{
    return current->info;
}

LinkListIterator LinkListIterator::operator++()
{
    current = current->link;
    return *this;
}

bool LinkListIterator::operator==(const LinkListIterator& right)const
{
    return(current == right.current);
}

bool LinkListIterator::operator!=(const LinkListIterator& right)const
{
    return (current != right.current);
}