Miért kéne működnie? Az a-ban stringek vannak, nem Adafruit_MCP23008 típusú elemek.
Ha esetleg így próbálnád meg:
Adafruit_MCP23008* Names[3] = { mcp0, mcp1, mcp2 };
akkor a ciklusod valóban Adafruit_MCP23008 típusú elemeken iterálna végig.
Tanuldd még kicsit a C++ nyelvet, ennek semmi köze Arduinohoz.
Eleve deklarálhattad volna a három objektumot tömbben is, nem kell külön létezzen az mcp0, mcp1, mcp2 változó.