How to loop over objects or pass object to function?
There's a couple of fundamental errors in your sketch.  Mainly your construction of your class instances:

SomeClass classA();
SomeClass classB();


Those are taken as functions that return a SomeClass object, not SomeClass constructors.  Instead they should just read:

SomeClass classA;
SomeClass classB;


As for the rest, you are much better off using pointers to the classes - it makes passing them around so much easier.  For instance, your array would look like this:

SomeClass *things[2] = {&amp;classA, &amp;classB};


That is an array of pointers to the objects.  It just stores the addresses that they are at, rather than duplicating the objects into new objects within the array.

Your loop would then run like this:

for (int i=0; i &lt; 2; i++) {
    things[i]-&gt;setFoo(100);
}


Note the use of -&gt; instead of . because you are using a pointer to the object.

Similarly your init() function would be like this:

int init(SomeClass *thing) {
    Serial.println("Setting up thing");
    thing-&gt;setFoo(100);
}

init(&amp;classA);


However, if you're never going to use the contents of your array with it you could use a reference instead of a pointer:

int init(SomeClass &amp;thing) {
    Serial.println("Setting up thing");
    thing.setFoo(100);
}

init(classA);


That performs the same job as a pointer but leaves you with what looks like a real object rather than a pointer to the object - in fact it's just aliased the object name to a new one at the same address so you can still access it the same using .