Fehler L-Wert bei verwendung von Property
-
Hallo zusammen,
im debugmodus bekomme ich immer den Fehler
[BCC32 Fehler] ThreadStart.cpp(147): E2357 Eine mit 'int' initialisierte Referenz muss einen L-Wert des Typs 'int' haben
und zwar hierbei:
//Prototyp: void set_bit(int &Port, int Bit,bool setzen); // Variable; __property int DigitalOut_Byte1= {read=read_Digout1, write=write_Digout1}; // Aufruf: set_bit(DigitalOut_Byte1,0x01,true);
Wenn ich die Debuginformationen in den Projekteigenschaften ausschalte bekomme ich keinen Fehler. Es wäre aber nicht schlecht wenn ich die hätte.
Hat jemand eine Idee wie ich den "Fehler" behoben bekomme
Danke schonmal
-
Hallo
VCL-Properties geben immer Kopien ihrer Werte zurück, keine Referenzen. Deine Verwendung in der Form PropTyp& Var = Prop ist damit eigentlich nicht zulässig. Das will die Fehlermeldung ausdrücken. Warum diese aber nur im Debug-Modus kommt, ist mir nicht klar.
bis bald
akari
-
Das ist wohl eine Parser Macke des Compilers, versuch´ mal den ersten Parameter zu klammern:
set_bit( (DigitalOut_Byte1) ,0x01,true);
-
akari schrieb:
VCL-Properties geben immer Kopien ihrer Werte zurück, keine Referenzen.
Das stimmt so nicht immer, vielleicht für atomare Typen. Wenn ich aber z.B. einen std::vector als Property habe wird die Referenz zurückgegeben.
#include <vector> #include <iostream> struct Test { std::vector<int> data_; __property std::vector<int> Data = { read=data_, write=data_ }; }; int main() { Test t; t.Data.push_back( 1 ); t.Data.push_back( 2 ); std::cout << t.Data.size() << std::endl; }
Gibt bei mir 2 aus, d.h. der Originalvektor wurde verändert. Das wäre nicht so, wenn eine Kopie beim Lesezugriff auf Data zurückgegeben würde.
-
DocShoe schrieb:
Das stimmt so nicht immer, vielleicht für atomare Typen. Wenn ich aber z.B. einen std::vector als Property habe wird die Referenz zurückgegeben.
Nur dann, wenn der Getter ein Feld und keine Funktion ist. Anders gesagt, wenn du dir das zunutze machst, durchbrichst du die Kapselung und verläßt dich auf ein Implementationsdetail.
-
Danke für eure beiträge,
kurz und knapp zusammengefasst heißt das das es nicht zulässig eine eigenschaft einer funktion zu übergeben und ich statdessen die eigenschaft in einer variable speicher die dann übergeben muss um die danach wieder zurück zu geben.
-
JBOpael schrieb:
kurz und knapp zusammengefasst heißt das das es nicht zulässig eine eigenschaft einer funktion zu übergeben
Als Wert schon, als Referenz nicht.
-
Mein ich ja