0
Ich will, um zu bestimmen, ob das Element im Vektor zwischen seinen Nachbarn Durchschnitt ist so ich dieses ProgrammFehler in Template-Funktion mit Iteratoren
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
bool is_avg(vector<T>::iterator x) { <-- error line
T l = *(x - 1), m = *x, r = *(x + 1);
return x * 2 == l + r;
}
int main() {
vector<int> v;
v.push_back(2);
v.push_back(3);
v.push_back(4);
cout << (is_avg(v.begin() + 1) ? "Yes" : "No");
return 0;
}
schrieb, aber es funktioniert nicht
main.cpp|6|error: template declaration of 'bool is_avg'
Was ist falsch?
Danke. ('x * 2' ist ein zufälliger Fehler). Können Sie erklären, warum es nicht möglich ist, "T" von "Vektor :: iterator" abzuleiten? Kann ich eine Variable mit dem Typ 'T' erstellen, ohne'auto' zu verwenden (zB in C++ 98)? –
Pavel
@Pavel im Wesentlichen (Einzelheiten das Duplikat Q & A sehen), der Compiler hat das Muster 'Vektor passen :: iterator' gegen das Argument übergeben, aber während dies zu tun, kann es bei der allgemeinen Form des Musters schaut nur, und nicht "drinnen". Eine andere Phrase, die Leute benutzen, ist, dass Compiler nicht über ein '' 'hinaus sehen können, weshalb der 'Iterator' nicht übereinstimmt. –
TemplateRex