amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Ich steh grad aufm Schlauch [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

08.07.2003, 09:35 Uhr

Reth
Posts: 1858
Nutzer
Hallo zusammen,

ich blicks grad nicht! In C(++) sollte es doch möglich sein einen const int Wert mittels Cast einem int-Wert zuzuweisen, oder?

Also irgendwie so:

int value = (int)(type->getValue());

wobei type->getValue() den Rückgabewert const int hat.

Mein Compiler meint dazu: Assignment type conflict.

Kann da jemand weiterhelfen? (Is banal, ich weiss)

Danke schon mal

Ciao

[ - Antworten - Zitieren - Direktlink - ]

08.07.2003, 16:16 Uhr

Tessien
Posts: 55
Nutzer
Moin Reth,

Bist Du sicher, daß der Fehler nicht woanders steckt? Nach meinem Wissen müsste diese simple Anweiseung problemlos kompilieren Ausprobiert habe ich es allerdings nicht.

Ich erinnere mich allerdings auch düster, irgendwo gelesen zu haben, daß C++ ein paar neue Cast-Operatoren mitbringt, von denen einer sogar speziell für const-Angelegenheiten gedacht war. Nicht treten, falls es nicht stimmt. Vielleicht mal "C++ reference" ergooglen.

Bye, Thomas
--
Thomas Schulze - programmer at Dreamworlds Development - http://www.dreamworlds.de

[ Dieser Beitrag wurde von Tessien am 08.07.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

08.07.2003, 16:27 Uhr

Xin
Posts: 28
Nutzer
Zitat:
Original von Reth:
Also irgendwie so:

int value = (int)(type->getValue());

wobei type->getValue() den Rückgabewert const int hat.

Mein Compiler meint dazu: Assignment type conflict.


Gibt Dein Compiler raus, welche Datentyp auf welchen Datentyp zugewiesen werden soll? Also ist sicher, dass er das Problem hat, dass er (const int) nicht auf (int) zuweisen kann?

Das müßte ohne Cast gehen. Sicher, dass das beschriebene da steht?
Ich selber mache gerne schonmal folgenden Fehler und such mich dran kaputt:

int value = type->getValue;

Hier weise ich eine Funktion auf ein int... deswegen ist's eigentlich ganz schön, wenn einem der Compiler dann sagt, dass (int (void)) nicht auf (int) zugewiesen werden kann...

Nur so ein Gedanke, woran's liegen könnte.

--
Mit freundlichem Gruß
Sascha 'Xin' Atrops

[ - Antworten - Zitieren - Direktlink - ]

08.07.2003, 20:53 Uhr

Holger
Posts: 8116
Nutzer
Also erst einmal:

Wenn Du einer Variablen vom Typ int eine Wert zuweist, ganz gleich woher, handelt es sich um eine Kopie des Wertes. Du kannst deshalb an der Variablen soviel herumschrauben, wie Du willst, am Wert der Quelle ändert das nichts.
Äquivalentes gilt für den Rückgabewert einer Funktion. Wenn der int ist, dann handelt es sich bereits um eine Kopie, die unabhängig von der Quelle ist.
const ist in diesem Zusammenhang nicht relevant.

Relevant ist das im Zusammenhand mit Zeigern oder Referenzen. Wenn der Rückgabewert const int& oder int* ist, dann kannst Du die Referenz resp. den Zeiger in einer Variablen speichern und auch den const Qualifier durch cast entfernen.
code:
const int& bla();
const int* blabla();

//...

int &ref=(int&)bla();
int *ptr=(int*)blabla();

ref=0;
*ptr=0;
//...


Es produziert nicht unbedingt crashes, das hängt von dem Rest des Codes und dem Compiler ab, empfehlenswert ist das natürlich trotzdem nicht.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ Dieser Beitrag wurde von Holger am 08.07.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

09.07.2003, 07:26 Uhr

Reth
Posts: 1858
Nutzer
Danke für die Hilfen!

War natürlich so ein dummer Fehler, hatte nichts mit den Datentypen zu tun!

Der Codeausschnitt, den ich gepostet habe, spiegelt nicht ganz den in meinem Programm wieder, dort hatte ich die Variable, an die zugewiesen wird im selben Scope schon mal verwendet mit nem komplett anderen Typ, daher diese Fehlermeldung!

[ - Antworten - Zitieren - Direktlink - ]

09.07.2003, 15:15 Uhr

Solar
Posts: 3680
Nutzer
Ganz davon ab heißt der Operator zum wegcasten von "const" - welch überraschung - "const_cast". Damit läßt sich auch ein "volatile" wegcasten.

Überflüssig zu sagen daß das in aller Regel sehr schlechter Stil ist. Zumal mit "mutable" inzwischen ein Qualifizierer existiert, der const_cast in den wenigen Fällen, in denen es vormals Sinn machte, ersetzen kann.

Für genauere Informationen sei an Stroustrup, Josuttis und andere Fachliteratur verwiesen. ;-)

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Ich steh grad aufm Schlauch [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.