hilpers


  hilpers > comp.lang.* > comp.lang.iso-c++ > 11/2004

 #1  
09.11.2004, 10:57
M G Berberich
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  
09.11.2004, 11:50
Horst Kraemer
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  
09.11.2004, 12:54
Martin Kaminski
"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  
09.11.2004, 13:04
M G Berberich
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  
09.11.2004, 13:32
Horst Kraemer
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  
09.11.2004, 23:50
Marcel Müller
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 }

Lagrange-Gleichung - Ableitung nach Ableitung dx/d(dx/dt))

Hallo zusammen, die Langrange-Gleichungen 2. Art ist dL/dx - d/dt dL/dx' = 0, x'=dx/dt, mit L = L(t,x,x') = T(t,x)-U(t,x'). Mit x=x_k, k=1...n. Es kommt der Punkt wo...

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 22:47 Uhr. | Privacy Policy