I am starting to think that the use of globals is not evil in itself. It is a problem of scale and scope. To take an example, which is unrealistic but possible:
Take a C program "PROG" where every heap allocated variable is globally defined. This kind of application is the way programming was done in the old days, before object orientation and ADT was invented (please allow me the simplification). This PROG will be hard to maintain and inflexible when it grows. If the complete source code fits into one screen, it should still be fine. However, as many found out, when PROG grows there is point when maintenance gets unreasonable. It simply takes too much effort to do changes, with severe side effects making it hard to guarantee correctness.
If this big PROG is packaged into one single huge class in C++, it will fulfill the requirement of not using globals. But the basic problem still remains, which is a problem of scale. Parameters in a class can be just as problematic as global parameters, if the class is too big (bloated, fat class, ...).
From that point of view, stating that global variables are evil is a simplification? The real problem is the size of the scope where a variable (or function and sometimes type!) is available. But I suppose it is much easier to explain "Don't use global variables", than to explain that scopes shall be kept to a minimum size.