I'm trying to make a simple program to learn about Binary Tree Traversals in C++. However, when I try to compile my program with make I get the following error: 
Undefined symbols for architecture x86_64:
  "Node::postOrderTraversalNode(Node*)", referenced from:
      BinaryTree::postOrderTraversal(BinaryTree*) in BinaryTree.o
      postOrderTraversalNode(Node*) in Node.o
ld: symbol(s) not found for architecture x86_64
I have looked at other StackExchange posts and have narrowed it down to something having to do with how I set up my makefile but I still can't seem find the error. Any help would be greatly appreciated.
Makefile:
BinaryTree_Program: Main.o BinaryTree.o Node.o
    clang++ BinaryTree.o Node.o Main.o -o BinaryTree_Program
Main.o: Main.cpp
    clang++ -c Main.cpp -o Main.o
BinaryTree.o: BinaryTree.h BinaryTree.cpp
    clang++ -c BinaryTree.cpp -o BinaryTree.o
Node.o: Node.h Node.cpp
    clang++ -c Node.cpp -o Node.o
clean:
    rm BinaryTree_Program Main.o BinaryTree.o Node.o
Main.cpp
#include "BinaryTree.h"
#include "Node.h"
int main() {
  Node* root = new Node(10);
  Node* nd1 = new Node(5);
  Node* nd2 = new Node(3);
  Node* nd3 = new Node(2);
  Node* nd4 = new Node(15);
  Node* nd5 = new Node(12);
  Node* nd6 = new Node(20);
  root->left = nd1;
  root->right = nd4;
  nd1->left = nd2;
  nd1->right = nd3;
  nd4->left = nd5;
  nd4->right = nd6;
  //       10
  //      /  \
  //    5    15
  //   / \   / \
  //  3  2  12 20
  BinaryTree* tree = new BinaryTree(root);
  BinaryTree::inOrderTraversal(tree);
}
BinaryTree.cpp
#include "BinaryTree.h"
#include "Node.h"
// The in, pre, and post is based on where we visit the root
BinaryTree::BinaryTree(Node* nd) {
  root = nd;
}
// The in, pre, and post is based on where we visit the root
void BinaryTree::inOrderTraversal(BinaryTree* t) {
  if (t != NULL){
    Node::inOrderTraversalNode(t->root);
  }
}
void BinaryTree::preOrderTraversal(BinaryTree* t) {
  if (t != NULL) {
    Node::preOrderTraversalNode(t->root);
  }
}
void BinaryTree::postOrderTraversal(BinaryTree* t) {
  if (t != NULL) {
    Node::postOrderTraversalNode(t->root);
  }
}
Node.cpp
#include "Node.h"
Node::Node(int d) {
  data = d;
  left = NULL;
  right = NULL;
}
void Node::visitNode(Node* nd) {
  std::cout << nd -> data << " " << std::endl;
}
void Node::inOrderTraversalNode(Node* nd) {
  if (nd != NULL) {
    Node::inOrderTraversalNode(nd -> left);
    Node::visitNode(nd);
    Node::inOrderTraversalNode(nd -> right);
  }
}
void Node::preOrderTraversalNode(Node* nd) {
  if (nd != NULL) {
    Node::visitNode(nd);
    Node::preOrderTraversalNode(nd -> left);
    Node::preOrderTraversalNode(nd -> right);
  }
}
void postOrderTraversalNode(Node* nd) {
  if (nd != NULL){
    Node::postOrderTraversalNode(nd -> left);
    Node::postOrderTraversalNode(nd -> right);
    Node::visitNode(nd);
  }
}
Node.h
#ifndef NODE_H
#define NODE_H
#include <iostream>
class Node {
public:
  // member data
  int data;
  Node* left;
  Node* right;
  // constructor
  Node(int d);
  // member functions
  static void inOrderTraversalNode(Node* nd);
  static void preOrderTraversalNode(Node* nd);
  static void postOrderTraversalNode(Node* nd);
  //static void levelOrderTralversalNode(Node* n);
  static void visitNode(Node*);
};
#endif
BinaryTree.h
#ifndef BINARYTREE_H
#define BINARYTREE_H
#include <iostream>
#include "Node.h"
using namespace std;
class BinaryTree {
public:
  // member data
  Node* root;
  // constructor
  BinaryTree(Node* n);
  // member functions
  static void inOrderTraversal(BinaryTree* t);
  static void preOrderTraversal(BinaryTree* t);
  static void postOrderTraversal(BinaryTree* t);
  //void levelOrderTraveral(BinaryTree* t);
};
#endif
 
    