Cast-Operator in einer template Klasse

Gast #1475971
Lesenswert?

Moin!

Ich habe ein problem mit einem cast-Operator in einer Template-Klasse. 
Konkret habe ich eine Iteratorklasse mit einen Template-Parameter auf 
was für einen Typ von Objekten der Iterator zeigt. Nun hab ich einen 
cast-operator geschrieben, der den Iterator in einen normalen Zeiger auf 
das aktuelle Element umwandelt.
1
template <typename T>
2
Iterator<T>::operator T*() const

Wenn ich aber nun den Iterator benutze, sagt der Compiler, dass kein 
Operator gefunden wurde, der diese Umwandlung ausführen könnte.
1
Iterator<Xyz> i(...);
2

3
Xyz* e = i;  //geht nicht
4
Xyz* e = (Xyz*) i; //ist genau das selbe

Hat jemand ne Idee, woran das liegt und wie man das lösen kann?

Vielen Dank!
Klaus
Gast #1476008
Lesenswert?

> Ich habe ein problem mit einem cast-Operator in einer Template-Klasse.

Er heißt "Konvertierungsoperator".

> Wenn ich aber nun den Iterator benutze, sagt der Compiler, dass kein
> Operator gefunden wurde, der diese Umwandlung ausführen könnte.
>
> Iterator<Xyz> i(...);
>
> Xyz* e = i;  //geht nicht
> Xyz* e = (Xyz*) i; //ist genau das selbe

Bei mir geht das.
Gast #1476571
Lesenswert?

In der Header Datei steht folgendes:
1
template<typename T>
2
class Iterator
3
{
4
private:
5
  cList<T*>* list;
6
  int index;
7
public:
8
  Iterator<T>(cList<T*>* list_);
9
  
10
  //operatoren ++, --, * hab ich der wegen der Übersichtlichkeit
11
  //weggelassen. Sind aber keine anderen Konvertierungsoperatoren oder so
12
  //dabei.
13

14
  operator T*() const;
15

16
  bool end;
17
  bool rend;
18
};
19

20
template <typename T>
21
Iterator<T>::operator T*() const
22
{
23
  if ( end || rend ) return NULL;
24
  return (*list)[index];
25
}


Dann hab ich in einer anderen Datei zum Testen geschrieben:
1
Iterator<cBuilding*> i(NULL);
2

3
cBuilding* b = i;


In der Zweiten Zeile kommt dann die Fehlermeldung:

1>buildings.cpp(645) : error C2440: '=' : cannot convert from 
'Iterator<T>' to 'cBuilding *'
1>        with
1>        [
1>            T=cBuilding *
1>        ]
1>        No user-defined-conversion operator available that can perform 
this conversion, or the operator cannot be called

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren