Если ваш Makefile работает как написано, то вы должны правильно настроить заголовочные файлы (например, Node.h). Таким образом, различные файлы могут быть скомпилированы и связаны друг с другом, но независимо от того, делаете вы это или нет, вы должны учитывать зависимости от заголовочных файлов.
OBJECTS= p6.o SetIter.o Node.o Set.o
CFLAGS= -ansi -pendantic -Wall -Wextra
CC= g++
# This will compile any object file (something.o) that is called for
# Note that I am using automatic variables-- "$<" means the first prerequisite
# (the .cpp file), "$^" means all the prerequisites, and "$@" means the target.
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@
# If A.cpp (or A.h) includes B.h, then if you change B.h you must recompile A.o,
# So A.o depends on B.h.
# I will make some educated guesses about how you include header files:
SetIter.o Node.o Set.o: Node.h
Set.o: Set.h
SetIter.o p6.o: Set.h SetIter.h
# This will link the object files together to make pg6.
# Notice that the target is the name of thing actually made, a good practice.
pg6: $(OBJECTS)
$(CC) $(CFLAGS) $^ -o $@
Вы должны решить эти .h зависимости, посмотрев на код. Есть способы заставить g ++ и Make делать это автоматически, но это продвинутая техника.