A!1 Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Hvorfor går ikke denne linja gjennom (i Constructor koden til en windows form i MS VS.NET 2003)? Det funker viss jeg fjerner | og Opaque. this->SetStyle(ControlStyles::AllPaintingInWmPaint | ControlStyles::Opaque, true); Feilbeskjed: System::Windows::Forms::Control::SetStyle' : cannot convert parameter 1 from 'int' to 'System::Windows::Forms::ControlStyles Med forklaring: Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast) Lenke til kommentar
maskefjes Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Er ikke veldig bevandret i C++, men uansett her er noen synspunkter som kan få deg videre: Regner med at SetStyle har følgende signatur: void SetStyle (System::Windows::Forms::ControlStyles , bool); når du så gjør: ControlStyles::AllPaintingInWmPaint | ControlStyles::Opaque så vil det gi en int og kompilatoren klager over at den ikke får System::Windows::Forms::ControlStyles som den vil ha. Vet ikke hva ControlStyles er for noe så så mye mer kan jeg ikke si. Håper det ga noen friske (om ikke oppklarende) tanker -/maskefjes Lenke til kommentar
A_N_K Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Er nok riktig som maskefjes sa. Hvis du kombinerer enumererte verdier på bitnivå må du caste til enum-typen, i dette tilfellet System::Windows::Forms::ControlStyles, som beskrevet i feilmeldingen. Lenke til kommentar
A!1 Skrevet 22. februar 2005 Forfatter Del Skrevet 22. februar 2005 (endret) Hei igjen A_N_K Det var det jeg trodde, rakk ikke å teste så mye isted, men det burde vel være mulig å kombinere enum-verdier i C++ uten å måtte caste resultatet tilbake til utgangspunktet? F.eks i C#, som jeg er vant med fungerer denne måten å kombinere enum-verdier utmerket. EDIT: this->SetStyle( (ControlStyles)(ControlStyles::AllPaintingInWmPaint | ControlStyles::Opaque), true); funker, men jeg kan ikke tenke meg at dette er den "riktige" måten å gjøre dette på, eller? Hvordan skal dette egentlig gjøres? Finnes det en annen operator jeg kan bruke som ikke gir "int" men "ControlStyles" som resultat? Endret 22. februar 2005 av Mental Lenke til kommentar
A_N_K Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Jeg er ganske rusten når det gjelder C++ (det typesystemet blir fort hårete), men jeg tror ikke castingen er til å unngå. Operator | produserer en verdi av type int som resultat, men en enum-definisjon blir behandlet som en egen type (selv om det bare er et sett med konstanter) og kompilatoren reagerer. Det vanlige idiomet i (moderne) C++ tror jeg ville være å bruke et std::bitset som OR'es med enumererte verdier (Qt bruker unsigned int ser jeg), istedenfor å bruke enum-typen direkte, men du har altså ikke noe valg i dette tilfellet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå