 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Markus Wilke Guest
|
Posted: Thu Dec 11, 2003 4:45 pm Post subject: Deklaration mehrer Funktionszeiger |
|
|
Hallo NG,
Weiß jemand, ob folgende Deklaration korrekt ist (es sollen 2
Funktionszeiger mit je einem int-Parameter und einem int-Rückgabewert
deklariert werden):
struct Ops {
int (*getsize)(int), (*identity)(int);
};
Das scheint von allen Compilern geschluckt zu werden, nur MSVC.net 2003 mag
das nicht, sondern will:
struct Ops {
int (*getsize)(int);
int (*identity)(int);
};
Ist das nun ein Bug in dem Compiler oder erforderlich nach ANSI-Norm?
Danke, Markus
PS:
1. Ich hatte diese Frage auch schon in microsoft.public.vc.language
gestellt, war aber nicht ganz zufriedengestellt mit der Antwort dort.
3. Mein vollständiges Testprogramm:
//-----------------------------------------------
struct Ops {
int (*getsize)(int), (*identity)(int);
};
struct has_pointer {
Ops *cops;
};
int bar(int i) {
return i+1;
}
int main() {
has_pointer f, *pf=&f;
if(!pf->cops->identity)
pf->cops->identity=bar;
return 0;
}
//-------------------------------------------------
führte zu
petsc_test.cpp(15) : error C2276: '!' : illegal operation on bound member
function expression
petsc_test.cpp(16) : error C2475: 'Ops::identity' : forming a
pointer-to-member requires
explicit use of the address-of operator ('&') and a
qualified name
petsc_test.cpp(16) : warning C4253: 'Ops::identity' : forming a
pointer-to-member requires
explicit use of the address-of operator ('&') and a
qualified name
petsc_test.cpp(16) : error C2659: '=' : overloaded function as left operand
3. Das Codeschnipsel ist ein Exzerpt aus einer Bibliothek (PETSC) und ist
dort sehr häufig in dieser Form enthalten. Wenn das so nicht korrekt ist,
würde ich das den Entwicklern sagen, um mir künftig Probleme zu vermeiden.
4. Ich habe diesen Beitrag schon mal geschickt, aber er kam irgendwie nicht
"durch", sorry wenn er jetzt 2x da ist.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
André Pönitz Guest
|
Posted: Thu Dec 11, 2003 6:13 pm Post subject: Re: Deklaration mehrer Funktionszeiger |
|
|
Markus Wilke <wilke (AT) temfnospam (DOT) de> wrote:
| Quote: | Hallo NG,
Weiß jemand, ob folgende Deklaration korrekt ist (es sollen 2
Funktionszeiger mit je einem int-Parameter und einem int-Rückgabewert
deklariert werden):
struct Ops {
int (*getsize)(int), (*identity)(int);
};
Das scheint von allen Compilern geschluckt zu werden, nur MSVC.net 2003 mag
das nicht, sondern will:
struct Ops {
int (*getsize)(int);
int (*identity)(int);
};
Ist das nun ein Bug in dem Compiler oder erforderlich nach ANSI-Norm?
|
Sieht nach Bug aus. Aus stilistischen Gruenden wuerde ich aber die
zweite Form eh' bevorzugen.
| Quote: | 3. Das Codeschnipsel ist ein Exzerpt aus einer Bibliothek (PETSC) und ist
dort sehr häufig in dieser Form enthalten. Wenn das so nicht korrekt ist,
würde ich das den Entwicklern sagen, um mir künftig Probleme zu vermeiden.
|
Wie gesagt, der Code sollte korrekt sein.
| Quote: | 4. Ich habe diesen Beitrag schon mal geschickt, aber er kam irgendwie nicht
"durch", sorry wenn er jetzt 2x da ist.
|
Die Moderation besteht aus Menschen. Welche Response-Zeit hast Du denn
erwartet?
Andre'
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Wilke Guest
|
Posted: Thu Dec 11, 2003 7:45 pm Post subject: Re: Deklaration mehrer Funktionszeiger |
|
|
André Pönitz wrote:
| Quote: | Markus Wilke <wilke (AT) temfnospam (DOT) de> wrote:
Hallo NG,
Weiß jemand, ob folgende Deklaration korrekt ist (es sollen 2
Funktionszeiger mit je einem int-Parameter und einem int-Rückgabewert
deklariert werden):
struct Ops {
int (*getsize)(int), (*identity)(int);
};
Das scheint von allen Compilern geschluckt zu werden, nur MSVC.net
2003 mag das nicht, sondern will:
struct Ops {
int (*getsize)(int);
int (*identity)(int);
};
Ist das nun ein Bug in dem Compiler oder erforderlich nach ANSI-Norm?
Sieht nach Bug aus. Aus stilistischen Gruenden wuerde ich aber die
zweite Form eh' bevorzugen.
|
Danke für die Info. Die Entscheidung liegt aber nicht in meiner Hand, da es
ein Schnipsel aus einer benutzten Bibliothek ist. Das ist jetzt nun
natürlich dumm für mich, weil die Bibliotheksentwickler ihren Code für
meinen buggy Compiler nicht ändern, und ich die Änderungen nach jedem Update
der Bibliothek wiederholen muss :-(
[...]
| Quote: | 4. Ich habe diesen Beitrag schon mal geschickt, aber er kam
irgendwie nicht "durch", sorry wenn er jetzt 2x da ist.
Die Moderation besteht aus Menschen. Welche Response-Zeit hast Du denn
erwartet?
|
Stimmt natürlich. An die Moderation hatte ich in dem Augenblick nicht
gedacht, dafür ging es (beim zweiten Mal) rasend schnell. Ich glaube aber
wirklich, dass mein erstes Posting die Gruppe nicht erreichte, weil ich
meinen News-Reader falsch bedient hatte. Ich wollte nur sichergehen...
Nochmals danke,
Markus
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Fri Dec 12, 2003 7:51 am Post subject: Re: Deklaration mehrer Funktionszeiger |
|
|
André Pönitz wrote:
| Quote: | Markus Wilke <wilke (AT) temfnospam (DOT) de> wrote:
struct Ops {
int (*getsize)(int), (*identity)(int);
};
struct Ops {
int (*getsize)(int);
int (*identity)(int);
};
Aus stilistischen Gruenden wuerde ich aber die
zweite Form eh' bevorzugen.
|
Ich wuerde hier eher mit typedef arbeiten, da die Elemente
public sind, und ich dem Nutzer der Klasse kein Rumgefuchtel
mit Funktionspointersyntax zumuten wollte.
Allgemein benutze ich für Funktionspointer meist typedefs,
sofern sie mehr als ein mal vorkommen. Das nimmt einem
an manchen Stellen zwar den Spass, lisp-aehnlichen Code zu
schreiben, aber vor allem auch den Stress. :)
Die Schreibweise für mehrere Funktionspointerdeklarationen
habe ich ausserdem so noch nie gesehen und waere ehrlich gesagt
auch erstmal ein wenig stutzig gewesen. Mit typedef
saehe es IMHO klarer und einfacher aus.
cu,
Daniel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Wilke Guest
|
Posted: Fri Dec 12, 2003 11:51 am Post subject: Re: Deklaration mehrer Funktionszeiger |
|
|
Daniel Albuschat wrote:
| Quote: | [snip]
Ich wuerde hier eher mit typedef arbeiten, da die Elemente
public sind, und ich dem Nutzer der Klasse kein Rumgefuchtel
mit Funktionspointersyntax zumuten wollte.
Allgemein benutze ich für Funktionspointer meist typedefs,
sofern sie mehr als ein mal vorkommen. Das nimmt einem
an manchen Stellen zwar den Spass, lisp-aehnlichen Code zu
schreiben, aber vor allem auch den Stress. :)
Die Schreibweise für mehrere Funktionspointerdeklarationen
habe ich ausserdem so noch nie gesehen und waere ehrlich gesagt
auch erstmal ein wenig stutzig gewesen. Mit typedef
saehe es IMHO klarer und einfacher aus.
|
danke für die hinweise. das mit den typedefs sehe ich auch so. nun bin ich
aber nicht der entwickler der open-source-bibliothek, sondern der nutzer.
das paket wird als quellcode zur verfügung gestellt, den man kompiliert. und
genau dieses kompilieren ist nach einem update meines compilers gescheitert,
so dass ich bei der ursachensuche auf obige zeilen gestoßen bin. da es aber
wohl syntaktisch korrekt ist, kann ich bei den entwicklern nun schlecht
einfordern, dass sie es ändern, damit auch mein compiler es übersetzt
ach ja, mit diesen pointern muss man als nutzer nicht hantieren. die werden
nur intern verwendet, um eine art virtual function table nachzubilden.
grüße, markus
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christoph Rabel Guest
|
Posted: Fri Dec 12, 2003 3:57 pm Post subject: Re: Deklaration mehrer Funktionszeiger |
|
|
Markus Wilke wrote:
| Quote: | Daniel Albuschat wrote:
danke für die hinweise. das mit den typedefs sehe ich auch so. nun bin ich
aber nicht der entwickler der open-source-bibliothek, sondern der nutzer.
das paket wird als quellcode zur verfügung gestellt, den man kompiliert. und
genau dieses kompilieren ist nach einem update meines compilers gescheitert,
so dass ich bei der ursachensuche auf obige zeilen gestoßen bin. da es aber
wohl syntaktisch korrekt ist, kann ich bei den entwicklern nun schlecht
einfordern, dass sie es ändern, damit auch mein compiler es übersetzt
|
Ich würde es zumindest probieren und sie auch in Hinsicht
auf die Lesbarkeit bitten es zu ändern. Wenn sie es nicht
tun, kannst du halt nix machen.
mfg
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Heinz Saathoff Guest
|
Posted: Mon Dec 15, 2003 12:13 pm Post subject: Re: Deklaration mehrer Funktionszeiger |
|
|
André Pönitz schrieb...
| Quote: | 4. Ich habe diesen Beitrag schon mal geschickt, aber er kam irgendwie nicht
"durch", sorry wenn er jetzt 2x da ist.
Die Moderation besteht aus Menschen. Welche Response-Zeit hast Du denn
erwartet?
|
Kleiner Hinweis dazu:
Normalerweise bekommt man sehr schnell eine automatisch generierte
e-mail, daß die Nachricht bei der Moderation angekommen ist und an einen
Moderator zur Prüfung weitergeleitet wird. Diese Bestätigung sollte
innerhalb weniger Stunden beim Poster sein.
Danach hängt es von den Moderatoren ab, wann die Nachricht öffentlich
verfügbar ist.
- Heinz
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|