A gdzie ty masz pliki nagłówkowe (te z końcówką .h)? Nie wspomnę już o niezałączeniu pliku do main'a, za pomocą dyrektywy #include. Odsyłam do tej lektury, jak podzielić kod w c++ na osobne pliki: Link.
A co do twojego kodu.. taka wersja będzie poprawna (nie testowałem, ale powinno działać):
//Treść plików została zamieszczona mniej więcej tak jak będzie to robił kompilator w trakcie kompilacji.. //file2.h //Tutaj mamy deklarację procedur update i local.. //Zawartość tego pliku załączamy do main.cpp, dzięki temu kompilator będzie wiedział, że takie funkcje w ogóle istnieją. //Natomiast ich ciała zamieszczamy w pliku file2.cpp void update(double dt, double warming); void local(double warming); //main.cpp #include <iostream> #include <file2.h> using namespace std; //double warming = 0.3; Nie opłaca się tworzyć zmiennej globalnej w tym miejscu.. //Lepiej jest to zrobić lokalnie (w main'ie), a potem przesłać ją do funkcji. void update(double dt); void local(); int main() { double warming = 0.3; cout << "Globalne ocieplenie wynosi "<< warming << " stopni.\n"; update(0.1); cout << "Globalne ocieplenie wynosi "<< warming << " stopni.\n"; local(); cout << "Globalne ocieplenie wynosi "<< warming << " stopni.\n"; return 0; } //file.cpp #include <file2.h> #include <iostream> using namespace std; void update(double dt, double warming) { warming += dt; cout << "Zwiekszam parametr ocieplenia do "<< warming; cout << " stopni.\n"; } void local(double warming) { cout << "Lokalne ocieplenie wynosi "<< warming << " stopni.\n"; cout << "Ale globalne ma wartosc "<< ::warming; cout << " stopni.\n"; }