I am having an issue with my program that cross-references a file and displays certain information in an alphabetized, numbered list. I keep getting 2 errors stating "undefined reference" for newMyTree as well as findOrInsert. I really don't know what I'm doing wrong and it is very frustrating. Can someone please help? These are the errors:
C:\**\**\**\**\crossref.o:crossref.c|| undefined reference to newMyTree|
C:\**\**\**\**\crossref.o:crossref.c|| undefined reference to findOrInsert| 
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 3 second(s)) ===|
The code:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MaxWordSize 20
#define MaxLine 101    
typedef struct listLinked{
    int numLine;
    struct listLinked*next;
    }ListLinked,*ListLinkedPtr;
typedef struct{
    char word[MaxWordSize+1];
    ListLinkedPtr firstLine;
    }NodeData;
typedef struct MyTree{
    NodeData data;
    struct MyTree*left,*right;
    }MyTree,*MyTreePtr;    
typedef struct{
    MyTreePtr root;
    }BinaryTree;
main(){
    int getWord(char[], char[]);
    MyTreePtr newMyTree(NodeData);
    NodeData newNodeData(char[]);
    MyTreePtr findOrInsert(BinaryTree, NodeData), node;
    ListLinkedPtr newListLinked(int);
    void inOrder(FILE*, MyTreePtr);
    char word[MaxWordSize+1];
    char line[MaxLine];
    int currentLine = 0;
    FILE*in = fopen("passage.in","r");
    FILE*out = fopen("passage.out","w");
    BinaryTree bst;
    bst.root = NULL;
    while (fgets(line, MaxLine, in)!= NULL){
        fprintf(out,"%3d. %s\n",++currentLine, line);
        //extract words from current line
        while (getWord(line, word)!= 0){
            if (bst.root == NULL)
                bst.root = node = newMyTree(newNodeData(word));
            else
                node = findOrInsert(bst,newNodeData(word));
            ListLinkedPtr ptr = newListLinked(currentLine);
            ptr -> next = node -> data.firstLine;
            node -> data.firstLine = ptr;
            }
        }
        fprintf(out, "\nWords               Line numbers\n\n");
        inOrder(out, bst.root);
        fclose(in); fclose(out);
}//close main
int getWord(char line[], char str[]){
//finds the next word in line and stores it in str
//returns 1 if a word is found; 0 otherwise
    static int p = 0; //p retains its value between calls to getWord
    char ch;
    int n = 0;
    //skips over non-letters
    while (line[p]!= '\0' &&!isalpha(line[p]))p++;
    if (line[p]!='\0')return p = 0; //reset p for the next line
    str[n++] = tolower(line[p++]);
    while (isalpha(line[p])){
        if(n < MaxWordSize)str[n++]= tolower(line[p]);
        p++;
    }
    str[n]= '\0';
    return 1;
}//end getWord
void inOrder(FILE*out, MyTreePtr node){
    void printAWord(FILE*, MyTreePtr);
    if (node!= NULL){
        inOrder(out, node -> left);
        printAWord(out, node);
        inOrder(out, node -> right);
    }
}//end inOrder
void printAWord(FILE* out, MyTreePtr pt){
    void printLineNumbers(FILE*,ListLinkedPtr);
    fprintf(out,"%-20s", pt -> data.firstLine -> next); //print all except first
    fprintf(out, "%3d\n", pt -> data.firstLine -> numLine);//print first
}//end printAWord
void printLineNumbers(FILE* out, ListLinkedPtr top){
//line numbers are in reverse order; print list reversed
    if (top != NULL){
        printLineNumbers(out, top -> next);
        fprintf(out, "%3d,", top -> numLine);
    }
}//end printLineNumbers
NodeData newNodeData(char str[]){
    NodeData temp;
    strcpy(temp.word, str);
    temp.firstLine = NULL;
    return temp;
}//end newNodeData
ListLinkedPtr newListLinked(int lineNo){
    ListLinkedPtr p = (ListLinkedPtr) malloc(sizeof(ListLinked));
    p -> numLine = lineNo;
    p -> next = NULL;
    return p;
}//end of newListLinked
 
     
    