let me start by saying that I am not the best C++ and I know very little in ways of Linux. For a class project we had to implement a heap so I coded everything on my Windows PC assuming I could just upload the files to the Linux repository the school has. [Perhaps this is where I went wrong and this cannot be done this simply.] My codes compiles and clears all test cases provided on my Windows pc. When I upload the files to Linux, I created a makefile and when I use the make command I get back a laundry list of multiple definition errors. One error per function that I am using. I have done some searching and I am more confused then when I started.
My files are: main.cpp, main.h, heap.cpp, heap.h, util.cpp, and util.h.
I think the issue is with my include statements but I am not 100% sure.
Here is an example of the files.
main.cpp
 #include <iostream>  //needed to use basic inputs/outputs
 #include <stdio.h>
 #include <stdlib.h>
 #include "main.h"
 #include "util.cpp"
 #include "heap.cpp"
 #include <fstream>
 using namespace std;
main.h is blank.
heap.cpp
 #include <iostream>  //needed to use basic inputs/outputs
 #include <stdio.h>
 #include <stdlib.h>
 #include "heap.h"
 #include <cmath>
 #include <math.h>
 using namespace std;
 //expanded functions found in the heap.h file
heap.h
 //2 structs
 //9 functions
util.cpp
 #include <iostream>  //needed to use basic inputs/outputs
 #include <stdio.h>
 #include <stdlib.h>
 #include "util.h"
 using namespace std;
 //expanded functions found in util.h
util.h
 //1 function
Between heap.h and util.h I have 10 function and upon running the make command I get a warning about all ten:
 multiple definition of 'FUNCTIONNAME'
 main.o:main.cpp:(.text+0x1b7): first defined here
I am assuming the 0x1b7 is a memory location because they are each different.
Any help would be greatly appreciated.