1) This is really a design decision. Is the variable supposed to be part of the state of an instance of the class? Then it should be a non-static data member of the class, as in your first example.
The second example is defining a global variable, not a member of the class. Global variables should be avoided wherever possible.
2) As a general rule, you should reduce unnecessary coupling by including header files only where they are needed. So it sounds as though you're doing it right.
> Where would you declare a local variable for a class?
If it is an instance variable (one for each object instance), it has to be declared in the class as a non static member.
If it is a shared variable (common to all object instances),
either declare it as a static member of the class (and define it in the implementation file)
or define it as a non member with internal linkage in the implementation file.
Header:
1 2 3 4 5 6 7 8 9
struct account
{
unsignedint number ; // instance variable
// each instance of account has its own number,
// different accounts have different numbers.
staticconstdouble rate_of_interest ; // static variable
// all instances of account share a common rate of interest.
};