Your operator is described as a free function; In my opinion, you did not want this. As I understand it, this is an operator for day - then it should be in the class day and look something like this -
day& operator+=(const product& prod) { ygl+= prod.Yglevod; bel+= prod.Belok; gur+= prod.Gur; kkal+= prod.Kkal; return *this; }
For such an access to the closed members of product your day class must be declared a friend; well, or you can declare as a friend only the += operator from the day class.
PS The operator can be declared as a free function, but, in my opinion, for the += operator it is more logical to be declared within the class as a member function.
PPS Here is a simple example where operators are declared both in the class and beyond.
class A; class B { public: B& operator +=(const A& a); int y; }; class A { private: int x; friend B& B::operator +=(const A& a); friend B& operator -=(B& b, A& a); }; B& B::operator +=(const A& a) { y += ax; return *this; } B& operator -=(B& b, A& a) { by -= ax; return b; } int main(int argc, const char * argv[]) { B b; A a; b += a; B c = b -= a; }