AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [C++] problem mit const-deklaration
Thema durchsuchen
Ansicht
Themen-Optionen

[C++] problem mit const-deklaration

Ein Thema von Haegar · begonnen am 5. Jun 2008 · letzter Beitrag vom 5. Jun 2008
Antwort Antwort
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#1

[C++] problem mit const-deklaration

  Alt 5. Jun 2008, 00:29
hiho,

also ich programmier primär in Java, C++ Erfahrung habe ich zwar aber es hält sich in Grenzen, habe hier auch eine Riesen C++ Bibel liegen (C++ Primer Plus) ... und mir is bewusst was "const" in den versch. Situationen bezweckt, aber das Problem was mir der Compiler nennt will mir nich klar werden.

hier nun mal etwas code:
Code:
/* vorgegebene Syntax der Methode */
cGate * NetworkStack::getExternalGate(cGate * outgate) const {

   // Your task: return the external gate for the given internal gate
   assert(outgate);
   assert(strcmp(outgate->name(),"netOut") == 0);

   //alles vorm "=" war gegeben, den Methodenaufruf habe ich eingefügt
   cGate * retval = gate(outgate->name(),outgate->index());

   assert(retval);   
   return retval;
}
so alles ausser der Aufruf mit gate is ja simpel, die Methode gate() gibt es in 2 folgenden Varianten:
Code:
cGate *cModule::gate(const char *s, int sn)

const cGate *cModule::gate(const char *s, int sn) const
ich vermute mal stark der compiler sucht sich die richtige Methode raus, weil die Parameter sind ja identisch.

ich bekomme nun bei obigem Code folgende Fehlermeldung:
Zitat:
ungültige Umwandlung von >>const cGate*<< in >>cGate*<<
also nun die frage ... HÄÄ? ... sieht für mich so aus als ob er quasi die falsche Variante der beiden gate()-Methoden wählt, bin aber gerne für Weisheiten offen ^^
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#2

Re: [C++] problem mit const-deklaration

  Alt 5. Jun 2008, 03:10
Ich nehme an, NetworkStack leitet con cModule ab.

Zitat von Haegar:
Code:
cGate *cModule::gate(const char *s, int sn)

const cGate *cModule::gate(const char *s, int sn) const

ich vermute mal stark der compiler sucht sich die richtige Methode raus, weil die Parameter sind ja identisch.
Nicht so ganz. Nach dem Rückgabewert wird eine Funktionsüberladung grundsätzlich nicht aufgelöst. Entscheidend ist hier, ob du ein const-Objekt hast oder nicht - und da die Methode getExternalGate() als const deklariert ist, geht sie von einem konstanten Objekt aus, d.h., es steht überhaupt nur die letzte Variante zur Verfügung. Und einen const cGate-Zeiger darfst du nunmal nicht an einen cGate-Zeiger zuweisen.
Moritz
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#3

Re: [C++] problem mit const-deklaration

  Alt 5. Jun 2008, 09:11
Zitat:
Und einen const cGate-Zeiger darfst du nunmal nicht an einen cGate-Zeiger zuweisen.
Das ist mir ja bewusst, nur da "cGate * retval = " bereits gegeben war werde ich da nix aendern, und ich hatte es auch auch mal mit "const cGate * retaval" probiert, aber da kam die selbe Fehlermeldung beim "return(retval)".

Diese Methode die ich da implementieren soll, wird von 3-4 anderen Methoden aufgerufen, auf welche ich gar kein Einfluss habe, sprich diese Aufrufer sind ebenfalls komplett vorgegeben, und bilden mit anderen Klassen das Backend.

Und du hast richtig vermutet, NetworkStack ist von cSimpleModule abgeleitet und dies wiederum von cModule.

so gesehen, steh ich n bissel auf dem schlauch, da ich die Aufrufe dieser Methode gar nich beeinflussen kann. Dort arbeite ich vermutlich nicht mit einem "const" Objekt.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#4

Re: [C++] problem mit const-deklaration

  Alt 5. Jun 2008, 12:22
Zitat von Haegar:
Zitat:
Und einen const cGate-Zeiger darfst du nunmal nicht an einen cGate-Zeiger zuweisen.
Das ist mir ja bewusst, nur da "cGate * retval = " bereits gegeben war werde ich da nix aendern, und ich hatte es auch auch mal mit "const cGate * retaval" probiert, aber da kam die selbe Fehlermeldung beim "return(retval)".
Entweder muß getExternalGate() auch einen const-Zeiger zurückgeben, oder die Methode darf nicht const sein. Eine andere Lösung sehe ich nicht.

Du könntest btw auch von dieser Methode, soweit notwendig, eine const- und eine non-const-Variante erstellen.
Moritz
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#5

Re: [C++] problem mit const-deklaration

  Alt 5. Jun 2008, 16:23
leider ist die methode sowie der rückgabewert fest vorgegeben, der übungsleiter meinte auch schon zu mir, dass ich defintiv mit der gate()-Methode arbeiten soll, aber scheinbar muss ich diese auf nem const networkstack aufrufen, kann ich das "this" quasi casten (gibts ein "this" wie in java? ^^) ... dann könnte ich auf dem const-gecasteten Objekt die gatemethode aufrufen, was dann funktionieren müsste?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: [C++] problem mit const-deklaration

  Alt 5. Jun 2008, 17:10
Ja, this gibt es. Und ein const_cast<> später klappt das vllt... - aber da bin ich auch überfragt, ob der const_cast<> hier anwendbar ist...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz