El uso de un initialize()método para una clase es contrario al principio de un constructor de clases, es decir, una vez que se ha construido una instancia de clase , debe estar " lista para usar ".
Como sugiere la respuesta de Ignacio, la sintaxis de ubicación de C ++ es mucho mejor para su propósito.
Sin embargo, con las bibliotecas Arduino, la sintaxis de ubicación no es compatible "de fábrica", por lo que debe implementarla usted mismo; no temas, eso es bastante sencillo:
void* operator new(size_t size, void* ptr)
{
    return ptr;
}
La sintaxis de ubicación puede ser una bestia compleja en C ++, pero para su propósito específico, su uso puede ser bastante simple:
static char buffer[sizeof FOOOBJ];
static FOOOBJ* foo;
void setup() {
    ...
    foo = new (buffer) FOOOBJ(3);
    ...
}
La diferencia con su código actual es que fooahora es un puntero, por lo tanto, se usará cualquier llamada de método en ->lugar de ..
Si absolutamente quiere seguir usándolo foocomo una instancia y no como un puntero, puede hacerlo (pero no lo aconsejo como se explica más adelante) utilizando una referencia en su lugar:
static char buffer[sizeof FOOOBJ];
static FOOOBJ& foo = *((FOOOBJ*) buffer);
void setup() {
    ...
    new (buffer) FOOOBJ(3);
    ...
}
El problema con este código es que no puede saber si fooya se ha construido con una FOOOBJinstancia real o no; Con un puntero, siempre puede comprobar si es 0o no.
Al utilizar la sintaxis de ubicación, debe tener en cuenta que no puede deletela fooinstancia anterior. Si desea destruir foo(es decir, asegurarse de que se llama a su destructor), debe llamar explícitamente al destructor:
foo->~FOOOBJ();
                 
                
FOOOBJes un objeto OneWire, que usa la biblioteca de Jim Studt (v2.2). Recibo el mensajeerror: no matching function for call to 'operator new(unsigned int, byte [14])'de lanewllamada. Parece que avr-g ++ puede no entender la sintaxis.newnada, solo inicializa algunas E / S.Puede usar la sintaxis de ubicación para especificar una asignación existente en la que instanciar la clase.
fuente
fooconchar foo[sizeof FOOOBJ];para queFOOOBJno se llame al constructor, lofooque podría ser un problema real dependiendo de lo que haga el constructor.