The problem is that you're acting as if you're in a conventional C++ environment, but you aren't.
The Arduino IDE follows its own set of rules to scrape together the set of files that it thinks are necessary to build your sketch, including to doing some manipulation to your sketch .ino file(s) to generate C++ files from them, and then tries to compile the whole lot. It does all this in a temporary directory which means that relative file references relative to your source directory won't work.
There are a couple of ways to include multiple files within your sketch in the Arduino scheme. The first way is to dump all your files in the directory that your sketch .ino file(s) are in. All files here will be copied to the temporary directory before compilation. The second way is to crate an Arduino library and reference it within your sketch. An Arduino library is a directory under the library directory within the Arduino software installation directory, or under the library directory within your Arduino sketch directory. The name of the directory is the name of the library. There must be a header file with the same name (with a .h extension). To reference the library, #include the header file in your sketch .ino file. Note that you only include the file name of the header file (#include "foo.h") and don't include any elements of the path. When you reference the library, all the source and header files in the library directory will be copied to the temporary directory and compiled into your sketch.
In C++ terms it's a bizarre and unintuitive process, but that's how the Arduino guys decided to do it.