Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av Mental
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...