C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Zuweisung von Referenzen

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Martin Höller
Guest





PostPosted: Sat Nov 15, 2003 11:42 am    Post subject: Zuweisung von Referenzen Reply with quote



Hallo!

Ich hab folgendes Problem:

class A
{
.....
A(const A& cpy); //copy constructor selbst implementiert
};

class B
{
public:
setVar(A& new_var) {var_ = new_var;}; //[1]
...

private:
A& var_;
...
};


[1] Hier schimpft der Compiler:
'A' : 'operator =' function is unavailable

Ich möchte einfach eine Referenz von A in B halten können...
Den =-Operator hab ich in A nicht implementiert. Halte ich auch nicht
für nötig. Wie kann ich das lösen?

Danke für die Tipps.

mfg, martin

PS: Ich verwende VC6 (Ja, ich weiß schon. Ich hab den g++ auch viel mehr
lieb...)

--
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 Schaaf
Guest





PostPosted: Sat Nov 15, 2003 1:15 pm    Post subject: Re: Zuweisung von Referenzen Reply with quote



"Martin Höller" <martin.hoeller (AT) inode (DOT) at> schrieb:

Quote:
class B
{
public:
setVar(A& new_var) {var_ = new_var;}; //[1]
...

private:
A& var_;
...
};


[1] Hier schimpft der Compiler:
'A' : 'operator =' function is unavailable

Er sollte eigentlich scho vorher schimpfen, weil eine Referenz nicht
initialisiert wurde. Man kann Refernzen nicht mehr umbiegen, nachdem
sie einmal existieren. Wohin eine Referenz zeigt, kann (und muß)
während der Initialisierung festgelegt werden:

int i = 3;

int& ri( i ); // Initialisierung: ri ist ein Alias für i

ri = 4; // äquivalent: i = 4

int& r2i = ri; // noch ein Alias für i
// Auch das ist Initialisierung! Keine Zuweisung.

int& r3i; // Fehler: Referenz nicht initialisiert

extern int& r4i; // Ok. Referenz wird in einer anderen Übersetzungs-
// einheit initialisiert.

Du mußt A::var_ also initialisieren. Element-Variablen werden in der
Initialisierungsliste (Surprise!) eines C'tor initialisiert:

B::B(A& new_var) var_(new_var} {}

Später kann diese Referenz nicht umgebogen werden. Wenn Du das
wirklich willst, verwende statt einer Referenz einen Zeiger!

--
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
Rolf Magnus
Guest





PostPosted: Sat Nov 15, 2003 2:05 pm    Post subject: Re: Zuweisung von Referenzen Reply with quote



Martin Höller wrote:

Quote:
Hallo!

Ich hab folgendes Problem:

class A
{
....
A(const A& cpy); //copy constructor selbst implementiert
};

class B
{
public:
setVar(A& new_var) {var_ = new_var;}; //[1]
...

private:
A& var_;
...
};


[1] Hier schimpft der Compiler:
'A' : 'operator =' function is unavailable

Ich möchte einfach eine Referenz von A in B halten können...
Den =-Operator hab ich in A nicht implementiert. Halte ich auch nicht
für nötig. Wie kann ich das lösen?

Gar nicht. Einer Referenz kann man nichts zuweisen. Beim Erzeugen der
Referenz muß diese mit einem Objekt initialisiert werden, und auf
dieses Objekt verweist sie dann so lange, wie sie existiert. Die
Zuweisung oben weist nur dem Objekt, auf das var_ verweist, den Wert
vom Objekt, auf das new_var verweist, zu.
Verwende statt einer Referenz einfach einen Zeiger als Member.

--
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
Alexander Bartolich
Guest





PostPosted: Sat Nov 15, 2003 6:29 pm    Post subject: Re: Zuweisung von Referenzen Reply with quote

begin Martin Höller:
Quote:
Hier schimpft der Compiler:
'A' : 'operator =' function is unavailable

Eine Referenz verweist während ihrer gesamten Lebensdauer auf ein
und das selbe Objekt. Man kann Referenzen nicht zuweisen. Punkt.
Wenn man das will, will man einen Zeiger.

http://www.parashift.com/c++-faq-lite/references.html#faq-8.5
--
Für Google, Tux und GPL!

--
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
Florian Weimer
Guest





PostPosted: Sat Nov 15, 2003 10:48 pm    Post subject: Re: Zuweisung von Referenzen Reply with quote

Rolf Magnus <ramagnus (AT) t-online (DOT) de> writes:

Quote:
Gar nicht. Einer Referenz kann man nichts zuweisen.

Man könnte aber den Destruktor der ganzen Klasse aufrufen und mittes
placement new ein neues Objekt mit der richtigen Referenz anlegen. 8->

--
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
Kostka, Volkmar
Guest





PostPosted: Sun Nov 16, 2003 12:15 am    Post subject: Re: Zuweisung von Referenzen Reply with quote


Hallo,

Florian Weimer wrote:
Quote:
Rolf Magnus <ramagnus (AT) t-online (DOT) de> writes:


Gar nicht. Einer Referenz kann man nichts zuweisen.


Man könnte aber den Destruktor der ganzen Klasse aufrufen und mittes
placement new ein neues Objekt mit der richtigen Referenz anlegen. 8-


Wirst du aber kaum in einem Kopierkonstruktor oder Zuweisungsoperator
machen. :-)

MFG

Volkmar Kostka

--
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 Schaaf
Guest





PostPosted: Sun Nov 16, 2003 11:16 am    Post subject: Re: Zuweisung von Referenzen Reply with quote

"Rolf Magnus" <ramagnus (AT) t-online (DOT) de> schrieb:

Quote:
Foo& Foo::operator=(const Foo& rhs)
{
this->~Foo();
new(this) Foo(rhs);
}

Ob das nun guter Stil ist, ist eine andere Frage.

Wenn der C'tor werfen kann, ist es Murks. Schlecht ist es auch
sonst, weil beim Aufruf der C'tors & D'tors mehr geschieht, als
nur die vom Programmierer definierte Funktion abzuarbeiten.

--
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
Rolf Magnus
Guest





PostPosted: Sun Nov 16, 2003 11:56 am    Post subject: Re: Zuweisung von Referenzen Reply with quote

Kostka, Volkmar wrote:

Quote:

Hallo,

Florian Weimer wrote:
Rolf Magnus <ramagnus (AT) t-online (DOT) de> writes:


Gar nicht. Einer Referenz kann man nichts zuweisen.


Man könnte aber den Destruktor der ganzen Klasse aufrufen und mittes
placement new ein neues Objekt mit der richtigen Referenz anlegen.
8-


Wirst du aber kaum in einem Kopierkonstruktor oder Zuweisungsoperator
machen. Smile

Im Kopierkonstruktor natürlich nicht, aber im Zuweisungsoperator wird
das tatsächlich manchmal gemacht, in der Art:

Foo& Foo::operator=(const Foo& rhs)
{
this->~Foo();
new(this) Foo(rhs);
}

Ob das nun guter Stil ist, ist eine andere Frage.

--
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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.