Warnung: Temporäre Größe für Parameter 'Rect'
-
Hallo,
was sagt mir diese Warnung? Kann man etwas dagegen machen?
[C++ Warnung] HexEdit.cpp(153): W8030 Temporäre Größe für Parameter 'Rect' in Aufruf von '_fastcall THexEdit::DrawCellText(TCanvas *,AnsiString,TRect &,int,int)' verwendet
Ich verwende ein StringGrid, dem ich mit:
Address->OnDrawCell = AddressDrawCell;eine Routine für OnDrawCell zuweise.
diese schaut so aus:
void __fastcall THexEdit::HexEditAddressDrawCell(TObject *Sender, int ACol, int ARow, const TRect &Rect, TGridDrawState State);ursprünglich war das nich "const TRect &Rect" sondern "TRect &Rect". Aber
damit funktioniert es leider nicht.Ich nehme an die Warnung kommt durch das "const". Kann ich dagegen etwas machen?
-
Acidmrp,
Acidmrp schrieb:
was sagt mir diese Warnung? Kann man etwas dagegen machen?
[C++ Warnung] HexEdit.cpp(153): W8030 Temporäre Größe für Parameter 'Rect' in...wenn man eine Referenz an eine Funktion übergibt, erwartet man häufig, daß die Funktion eine Veränderung an der referenzierten Variablen vornimmt. Wird die Variable jedoch erst in der Parameterliste erzeugt (const TRect &Rect), hat man nach Abarbeitung der Funktion sowieso keinen Zugriff mehr darauf. Der Compiler gibt wohl eine Warnung aus, um den Programmierer auf diesen potentiellen Widerspruch hinzuweisen.
Abstellen kannst Du das, indem Du die Variable vor Aufruf der Funktion erzeugst.
-
Danke für die Antwort!
Jetzt ist mir alles klar. Das Problem war, dass ich in der DrawCell Routine
eine weitere Routine aufgerufen habe bei der Rect kein const war. Jetzt hab
ich Rect bei dieser Routine auch const gemacht und damit klappt alles. Ist
ja auch logisch
-
Wirklich logisch ist das nicht, schliessliech kommt die originale (von der IDE erzeugte) Methode auch ohne const aus.
-
ja, dass ist seltsam. Aber mit dem Const ist es klar. Wenn jemand weiß warum
ich das Const brauche hab ich natürlich ein offenes Ohr. Wäre schon interessant.