Hallo,
Ich habe mich in den letzten Tagen fast nur noch mit template Klassen beschäftigt und endlich die Initialisierung eines Arrays hinbekommen. "Dummerweise" gleich mit 3 verschiedenen Syntaxen, nirgends meckert der Compiler. Was mich ehrlich gesagt etwas verwundert.
Die Einzelinitialisierung in Zeile 51,52 mit ihren Aufrufen in Zeile 75,76 funktionieren. Ich möchte jedoch alles in einem Array behandeln. Der Aufruf in Zeile 78 des Array scheitert. Ich weiß auch nicht wie ich dem noch einen unbekannten Datentyp mitgeben soll. Er meckert das ihm ein template Argument fehlt. Aber was für eins?
error: missing template arguments before 'Steuerung'
array2[0].inits(); // Syntax?
Sketch:
/*
Doc_Arduino - german Arduino Forum
IDE 1.8.8
avr-gcc 7.3.0 mit -std=gnu++17
Arduino Mega2560
29.04.2019
GPA.0 ... GPA.7 => Pinnummer 0-7
GPB.0 ... GPB.7 => Pinnummer 8-15
*/
#include <Wire.h>
#include <docMCP23017.h>
const byte MCP_I2C_ADR = 0x20;
InputPullup Taster_11 (MCP_I2C_ADR, 0);
InputPullup Taster_22 (MCP_I2C_ADR, 1);
Output Led_11 (MCP_I2C_ADR, 8);
Output Led_22 (MCP_I2C_ADR, 9);
// *******************************************************************************
template <typename I, typename O, typename T>
class Steuerung
{
private:
I objT;
O objL;
T intervall;
public:
// Konstruktor
Steuerung(I &pT, O &pL, T iv) :
// Initialisierungsliste
objT{pT},
objL{pL},
intervall{iv}
{}
// Methoden
void inits ()
{
objT.init();
objL.init();
}
};
// *******************************************************************************
//Steuerung steuerung1 {Taster_11, Led_11, 500}; // funktioniert
//Steuerung steuerung2 {Taster_22, Led_22, 500}; // funktioniert
/*
template <typename T>
T array1[] = {
{Steuerung (Taster_11, Led_11, 500)}, // Parameter laut Initialisierungsliste
{Steuerung (Taster_22, Led_22, 250)}, // Taster, Led, Blinkintervall
};
*/
template <typename T>
T array2[] = {
{T (Taster_11, Led_11, 500)}, // Parameter laut Initialisierungsliste
{T (Taster_22, Led_22, 250)}, // Taster, Led, Blinkintervall
};
/*
template <typename T>
T array3[] = {
{Taster_11, Led_11, 500}, // Parameter laut Initialisierungsliste
{Taster_22, Led_22, 250}, // Taster, Led, Blinkintervall
};
*/
void setup(void) {
Wire.begin();
//steuerung1.inits(); // funktioniert
//steuerung2.inits(); // funktioniert
array2[0].inits(); // Syntax?
/*
// das ist das Ziel //
template <typename T>
for (T &k : array2) {
k.inits();
}
*/
}
void loop(void) {
if (Taster_11.read() ) {
Led_11.setHigh();
}
else {
Led_11.setLow();
}
if (Taster_22.read() ) {
Led_22.setHigh();
}
else {
Led_22.setLow();
}
}
docMCP23017.zip (3.54 KB)