¿Qué tiene de malo mi código de plantilla de C++ para Arduino?

Estoy tratando de implementar una función de miembro con plantilla de C ++ en Arduino 0022, pero recibo un error en el código que me parece correcto.

// in Settings.h
template <class T> void save( T variable );

// in Settings.cpp
template <class T> void Settings::save( T variable ) {
  Serial.println("Want to save a variable of size " + String( sizeof(T) ) );
};

// salida del compilador (vinculador) TimeMachineArduino.cpp.o: En función SimpleScreen::left():

SimpleScreen.h:85: referencia indefinida avoid Settings::save<int>(int)

SimpleScreen.h:86: referencia indefinida avoid Settings::save<double>(double)

SimpleScreen.h:87: referencia indefinida avoid Settings::save<char>(char)

La SimpleScreen::left()función es donde estoy instanciando implícitamente las funciones de la plantilla (llamando a save en un int, double y char).

Esta es en realidad una pregunta de C++. Deberías hacer esas preguntas en Stackoverflow.com. La respuesta a esta pregunta está aquí: stackoverflow.com/q/648900

Respuestas (1)

Debe mover el contenido del .cpparchivo al .harchivo. La separación de declaraciones y definiciones no funciona para las plantillas. Vea el enlace @sharptooth publicado: https://stackoverflow.com/q/648900 .