I have this basic code here: it's a Node that's part of a List, and each Node holds Data
#ifndef NODE_H_
#define NODE_H_
#include "Data.h"
namespace std {
class Node {
public:
    Node();
    Node(Data* aItem);
    virtual ~Node();
    virtual Node* getNext();
    virtual void setNext(Node * linkedNode);
    virtual Data* getData();
    virtual void setData(Data * item);
private:
    Node *next;
    Data *item;
};
} /* namespace std */
#endif /* NODE_H_ */
For "Data *item;", as you can see at the top I have included Data.h, is there a reason why its saying Data does not name a type?
Error log:
..\Node.h:17:11: error: expected ')' before '*' token
  Node(Data* aItem);
           ^
..\Node.h:21:13: error: 'Data' does not name a type
     virtual Data* getData();
             ^
..\Node.h:22:26: error: 'Data' has not been declared
     virtual void setData(Data * item);
                          ^
..\Node.h:25:2: error: 'Data' does not name a type
  Data *item;
Edit: added Data.h
#ifndef DATA_H_
#define DATA_H_
#include "List.h"
namespace std {
class Data {
private:
    int ID;
    List* listOne;
    List* listTwo;
public:
    Data();
    Data(int aID);
    virtual ~Data();
    virtual int getID();
    virtual void setID(int aID);
    virtual List* getListOne();
    virtual List* getListOne();
};
} /* namespace std */
#endif /* DATA_H_ */
List.h:
#ifndef LIST_H_
#define LIST_H_
#include "Node.h"
#include "Data.h"
namespace std {
class List {
private:
    std::Node *top;
public:
    List();
    virtual ~List();
    virtual Node* getTop();
    virtual void add(Node * linkedNode);
    virtual void remove(Node * linkedNode);
};
} /* namespace std */
#endif /* LIST_H_ */
 
    