The declaration is where it says "int i;"
The definition as such doesn't exist. The member is defined as part of the larger object whenever a variable of type Foo is defined.
As in: just because the initializer is in the class body, doesn't give you the right to omit the definition.I do not understand what do you mean "still required"?