hilpers


  hilpers > comp.lang.* > comp.lang.iso-c++

 #1  
09.11.2004, 09: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, 10: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, 11: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, 12: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, 12: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, 22: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 }

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