PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Probleme mit Templates bei Vektoren


dav133
2010-05-22, 14:12:04
Servus, folgender Codeausschnitt:


#include <vector>
using namespace std;

template <class T>
class V
{
public:
vector<T>::iterator gibMirIteratorAufBegin()
{
return v.begin();
}

private:
vector<T> v;
};

int main()
{
V<int> v;

vector<T>::iterator begin = v.gibMirIteratorAufBegin();

return 0;
}


Problem: das T in vector<T>::iterator gibMirIteratorAufBegin() führt zu folgendem Output:


main.cc:8: error: expected `;' before "gibMirIteratorAufBegin"
main.cc:13: error: expected `;' before "private"
main.cc: In function `int main()':
main.cc:21: error: 'class V<int>' has no member named 'gibMirIteratorAufBegin'


Ersetze ich das <T> durch <int> klappts, ich wills aber variabel halten :(.

Gnafoo
2010-05-22, 14:24:06
Zwei Probleme:

1.) Bei zusammengesetzten Typnamen in Templates (die von einem Typparameter abhängen) muss ein "typename" davor. Das ist so ein Spezialfall in C++, dessen Lösung nicht unbedingt naheliegend ist. Richtig wäre hier also:


typename vector<T>::iterator gibMirIteratorAufBegin()
{
return v.begin();
}


2.) In der main hast du keinen Typparameter T, weißt dafür aber, dass es int ist. Daher:


vector<int>::iterator begin = v.gibMirIteratorAufBegin();

dav133
2010-05-22, 14:53:11
Super, vielen Dank! Das mit dem typename wusste ich nicht. Das andere war ein Schusselfehler.

gruß