Const char foo[] = "gives me an error"

In my experience, the compiler optimizes string literals by only making one copy of each unique string. If you add two lines:

void setup()
{
  Serial.begin(115200);
  delay(1000);
  Serial.println((uint16_t)myObj1.foo, HEX);
  Serial.println((uint16_t)myObj2.foo, HEX);
  Serial.println((uint16_t)"hello world", HEX);
  Serial.println((uint16_t)"hello world", HEX);
}

You will see that 117 gets displayed four times.