Ich habe eine Funktionsvorlage und Haupt wie folgt:cin >> Funktionsvorlage arg unbekannter Art
template <class type > type* calculate(type inputVal) {
type val;
static int counter = 0;
static type sum = inputVal;
static type average = inputVal;
static type* address = &sum
do {
cout << "Enter value: ";
cin >> val;
counter++;
sum += val;
average = sum/counter;
} while (!cin.eof());
return address;
}
void main() {
int num;
cout << "Enter Value: ";
cin >> num;
int *ptr = calculate(num);
cout << "SUM: " << *ptr << " AVG: " << *(ptr+1);
}
Mein Problem ist, dass diese mit unterschiedlichen Eingabetypen statt nur int funktionieren sollte, so dass, wenn ein Benutzer zum ersten Mal Betritt einen Float, behandelt es alles wie diesen Typ, genauso wie wenn der Benutzer einen Char eingibt.
Auch kann die Template-Funktion nicht die Endwerte drucken.
1. Declareing oder definieren 'void main()' im globalen Namensraum ist illegal in Standard C++. Sie sollten 'int main()' als Einstiegspunkt verwenden. 2. Semikolons fehlen nach 'statischem Typ * Adresse = & sum',' cin >> num' und 'berechnen (num)' 3. '! Cin.eof()' als Schleifenbedingung [scheint schlecht] (http: // stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) und ich schlage vor, sollten Sie prüfen, ob 'cin >> val' stattdessen erfolgreich ist. – MikeCAT
'* (ptr + 1)' ist schlecht, weil es außerhalb des Bereichs dereferenziert. – MikeCAT
Es ist nicht möglich. Ein Programm kann nicht entscheiden, welchen Typ eine Variable basierend auf der Standardeingabe hat. Alle Arten aller Variablen müssen im Voraus bekannt sein. –