Hi, didn't actually compile your code, but I believe your problem (at least, one of them) is similar to what TheIdeasMan already said. (EdiT: I had my window open for a while and didn't see that TheIdeasMan already replied again about 15 minutes before me :))
You have interpreter.h #including function_scope.h, but then you have function_scope.h including interpreter.h. This is circular logic. What happens if you were to move your #include "function_scope.h" to the beginnering of interpreter.c?
Also, you need to #include <map> in interpreter.h.
PS: In C++, it might confuse some IDEs (and other programmers) if you name C++ files with .c extension. Usually C++ files are .cpp or .cc or .cxx. I most often see .cpp.
On the file extensions: I like *.hpp rather than *.h for C++ header files. It's just a convention, but *.h could mean a C header file.
3.3 Compiling C++ Programs
C++ source files conventionally use one of the suffixes ‘.C’, ‘.cc’, ‘.cpp’, ‘.CPP’, ‘.c++’, ‘.cp’, or ‘.cxx’; C++ header files often use ‘.hh’, ‘.hpp’, ‘.H’, or (for shared template code) ‘.tcc’; and preprocessed C++ files use the suffix ‘.ii’. GCC recognizes files with these names and compiles them as C++ programs even if you call the compiler the same way as for compiling C programs (usually with the name gcc).