|
|
||||||
|
#1
|
|
|
|
|
Hallo,
ich habe gerade festgestellt, daß man einen von einem struct abgeleiteten struct nicht mit {...} initialisieren kann. struct B { int i; }; class C { struct A : public B { int i; }; static A nil; }; C::A C::nil = { 1, 1 }; funktioniert nicht. Wenn ich B zu einem Member mache funktioniert es aber. Der Compiler verlangt eine Konstruktor (den es nicht gibt). Hat der Kompiler recht? Macht das Sinn? MfG bmg |
|
|
|
#2
|
|
|
|
|
M G Berberich <berberic> wrote:
> Hallo, > > ich habe gerade festgestellt, daß man einen von einem struct > abgeleiteten struct nicht mit {...} initialisieren kann. > > struct B { int i; }; > > class C > { > struct A : public B { int i; }; > static A nil; > }; > C::A C::nil = { 1, 1 }; > > funktioniert nicht. Wenn ich B zu einem Member mache funktioniert es > aber. Was genau funktioniert wann? Bitte ein konkretes Beispiel. Nicht einmal so etwas struct B { int i; }; struct A:B { int i; }; A a = {1,1} darf funktionieren, denn abgeleitete Klassen koennen lt. C++-Standard nicht per {...} initialisiert werden. > Der Compiler verlangt eine Konstruktor (den es nicht gibt). Hat > der Kompiler recht? Macht das Sinn? Der Compiler gibt hier moeglicherweise eine unklare bzw. "falsche" Fehlermeldung, aber er ist sicher im Recht, wenn er Dein Konstrukt nicht akzeptiert. |
|
#3
|
|
|
|
|
"M G Berberich" <berberic> schrieb im Newsbeitrag news:2ln1
> Hallo, > > ich habe gerade festgestellt, daß man einen von einem struct > abgeleiteten struct nicht mit {...} initialisieren kann. > > struct B { int i; }; > > class C > { > struct A : public B { int i; }; > static A nil; > }; > C::A C::nil = { 1, 1 }; Hallo M G, es liegt daran, dass 'struct' wie eine Klasse gehandhabt wird, deren Elemente alle 'public' sind. Daher der verlangte Konstruktor. Gruß Martin |
|
#4
|
|
|
|
|
Hallo,
On Tue, 09 Nov 2004, Horst Kraemer <horst.kraemer> wrote: > M G Berberich <berberic> wrote: > > Was genau funktioniert wann? Bitte ein konkretes Beispiel. struct A { B b; int i; }; funktioniert. > [...] denn abgeleitete Klassen koennen lt. C++-Standard > nicht per {...} initialisiert werden. > Der Compiler gibt hier moeglicherweise eine unklare bzw. "falsche" > Fehlermeldung, aber er ist sicher im Recht, wenn er Dein Konstrukt > nicht akzeptiert. Schade. Obwohl bei structs ohne Konstruktoren doch nichts dagegenspräche (außer dem C++-Standard natürlich :). Danke. MfG bmg |
|
#5
|
|
|
|
|
M G Berberich <berberic> wrote:
> Hallo, >> On Tue, 09 Nov 2004, Horst Kraemer <horst.kraemer> wrote: >> struct A { B b; int i; }; > > funktioniert. OK. Dann ist A ja nur ein Aggregat - hier eine stinknormale C-struct - und A a = {{1},1}; ist aus diesem Grunde legal. |
|
#6
|
|
|
|
|
M G Berberich wrote:
> Hallo, > > ich habe gerade festgestellt, daß man einen von einem struct > abgeleiteten struct nicht mit {...} initialisieren kann. Die C-Style Zuweisung klappt nur bei einfachen Datentypen ohne OO-Struktur. Mit stuct bzw. class hat das nichts zu tun. Man kann mit struct exakt das gleiche machen, wie mit class, wenn man sich nicht auf die Standard-Zugriffsrechte verläßt. Die Sache kann nicht funktionieren, weil bei Vererbung das Speicherlayout nicht festgeschrieben ist. Marcel |
|
|
| Ähnliche Themen | |
| Komisches Gefühl : Konstruktor ruft anderen Konstruktor gleicher Klasse auf? Hallo NG Wieder einmal bin ich versucht, folgendes zu tun... TMyClass=class .... constructor Create(aProperty1 : integer);override; constructor Create(aProperty1,aProperty2... |
|
| Konstruktor im Konstruktor der selben Klasse aufrufen Hallo, gibt es in C++ die Möglichkeit, in einem Konstruktor einen anderen in der selben Klasse aufzurufen? Von Java kenne ich sowas: class A { |
|
| Konstruktor der Basisklasse und eigenen Konstruktor aufrufen Hallo allerseits! Ich habe eine Basisklasse, die über zwei Konstruktoren verfügt: public class MyBaseClass { public MyBaseClass() { // Mach was } |
|
| Ableitung von einer Funktion, die als Argument selber eine Ableitung besitzt nachdem sie abgeleitet wird (s. Bronstein Gl. 10.18, 10.19) hallo! kann mir jemand erklären, wie man von folgendem Ausdruck d/(dx) (d(F(y'))/dy') zu folgedem Ausdruck d²F(y')/(dxdy')+d²F(y')/(dydy')*y'+d²F(y')/(dy'²)*y'' kommt. |
|
|
Alle Zeitangaben in WEZ. Es ist jetzt 03:50 Uhr. | Privacy Policy
|