но при компилировании я получаю ошибку: "множественное определение foo()".
вопрос: как вынести функцию foobar() в отдельный файл, что бы она была доступна из main.cpp?
#ifndef _foobar_cpp_
#define _foobar_cpp_
тут описание функции foobar
#endif // _foobar_cpp_
Но обычно программные модули компилируют раздельно.
Между ними разделяются только объявления функций, а описания компилятся в отдельные объектные файлы.
И собирается это всё вместе на этапе сборки конечного, исполняемого файла или библиотеки.
#pragma once // для компилеров, которые это понимают, оптимальнее, чем ifndef+define
#ifndef _FUNCS_H // если компилер проигнорил #pragma
#define _FUNCS_H // то защитить 2-кратное объявление при помощи ifndef/define
foobar();
#endif