VisualC++: Funktionsaufruf im Template

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

VisualC++: Funktionsaufruf im Template

Beitrag von Xin » So Sep 27, 2009 7:45 pm

Ich habe folgende Template-Funktion:

Code: Alles auswählen

template <class T, void (*SetCoordinate)( int pointno, Point point, T * userData )>
void Bresenham( T * userData, Point start, Point end )
Ich kompiliere derzeit einiges meines Quellcodes mit Visual C++ 2008, weil unterschiedliche Compiler auch unterschiedliche Fehler finden. Das hier frisst der GCC, Visual C++ 2008 wirft jedoch folgende Meldung:

Code: Alles auswählen

c:\users\xin\desktop\genesys\trunk\de\xsd\algo\bresenham.h(26) : error C2993: 'XSD::Unit::Point': Ungültiger Typ für den Nichttyp-Vorlagenparameter 'point'
Es weiß nicht zufällig jemand, was mir VC++ damit sagen möchte?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: VisualC++: Funktionsaufruf im Template

Beitrag von cloidnerux » So Sep 27, 2009 7:58 pm

Es weiß nicht zufällig jemand, was mir VC++ damit sagen möchte?
Jap. Du willst einen unzepzifischen typ erstellen, ein Struct ist aber sehr spezifisch, also verwende einen Pointer:
http://msdn.microsoft.com/en-us/library ... 80%29.aspx
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: VisualC++: Funktionsaufruf im Template

Beitrag von Xin » So Sep 27, 2009 8:09 pm

cloidnerux hat geschrieben:
Es weiß nicht zufällig jemand, was mir VC++ damit sagen möchte?
Jap. Du willst einen unzepzifischen typ erstellen, ein Struct ist aber sehr spezifisch, also verwende einen Pointer:
http://msdn.microsoft.com/en-us/library ... 80%29.aspx
Ich übergebe einen Zeiger - und zwar einen Zeiger auf eine Funktion, die nunmal eine teilweise spezifische Signatur hat.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: VisualC++: Funktionsaufruf im Template

Beitrag von cloidnerux » So Sep 27, 2009 8:10 pm

Ich übergebe einen Zeiger - und zwar einen Zeiger auf eine Funktion, die nunmal eine teilweise spezifische Signatur hat.
Und das mag er nicht.
Probiere es doch mit dem pointer auf das Struct aus.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: VisualC++: Funktionsaufruf im Template

Beitrag von Xin » So Sep 27, 2009 8:11 pm

cloidnerux hat geschrieben:
Ich übergebe einen Zeiger - und zwar einen Zeiger auf eine Funktion, die nunmal eine teilweise spezifische Signatur hat.
Und das mag er nicht.
Probiere es doch mit dem pointer auf das Struct aus.
Ich übergebe aber kein Struct an das Template, sondern eine Callback-Funktion und die ist nunmal so.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: VisualC++: Funktionsaufruf im Template

Beitrag von cloidnerux » So Sep 27, 2009 8:20 pm

Code: Alles auswählen

Point point
Ich beziehe mich auf das Struct point, auf das sich auch die Fehlermeldung bezieht.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: VisualC++: Funktionsaufruf im Template

Beitrag von Xin » So Sep 27, 2009 8:32 pm

cloidnerux hat geschrieben:

Code: Alles auswählen

Point point
Ich beziehe mich auf das Struct point, auf das sich auch die Fehlermeldung bezieht.
Ich auch: Und dieses gehört zu einer Signatur eines FunktionsPOINTERS.

Code: Alles auswählen

void (*SetCoordinate)( int pointno, Point point, T * userData )
Die 'Point point' wird nie übergeben, lediglich der Zeiger auf eine Funktion, die innerhalb des Templates als SetCoordinate bekannt sein wird und nun mal void zurückgibt und (int, Point T*) übergibt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: VisualC++: Funktionsaufruf im Template

Beitrag von cloidnerux » So Sep 27, 2009 8:45 pm

Ich auch: Und dieses gehört zu einer Signatur eines FunktionsPOINTERS.
Das mag ja sein, doch deine Fehlermeldung bezieht sich darauf, das in dem Template eine Structur übergeben uwrde, das Template das aber nicht akzeptiert und einen Pointer verlangt.
Aber das Einzige Struct, das sich im Template befindet ist Point. Wenn es sich nicht darauf bezieht, auf was dann?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: VisualC++: Funktionsaufruf im Template

Beitrag von Xin » So Sep 27, 2009 8:51 pm

cloidnerux hat geschrieben:
Ich auch: Und dieses gehört zu einer Signatur eines FunktionsPOINTERS.
Das mag ja sein, doch deine Fehlermeldung bezieht sich darauf, das in dem Template eine Structur übergeben uwrde, das Template das aber nicht akzeptiert und einen Pointer verlangt.
Aber das Einzige Struct, das sich im Template befindet ist Point. Wenn es sich nicht darauf bezieht, auf was dann?
Es bezieht sich auf dieses point.

Trotzdem ist es kein Template-Übergabeparameter.
Ich brauche aber keine Lösung, wie ich etwas anderes zu programmieren habe, sondern eine Lösung, wie man eine derartige Signatur Visual C++ verständlich mache.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: VisualC++: Funktionsaufruf im Template

Beitrag von Dirty Oerti » So Sep 27, 2009 10:33 pm

Ganz banal, zumindest kam mir das so in den Sinn, als ich mir das angeguckt habe. Funktioniert das:

Code: Alles auswählen

template <class T, void (*SetCoordinate)( int , Point , T * )>
void Bresenham( T * userData, Point start, Point end )
:?:
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten