Avatar billede hurra Novice
07. maj 2010 - 11:37 Der er 6 kommentarer og
1 løsning

const array til at init en const

Hej experter, jeg sidder med et problem hvor jeg har prøvet at lave noget generisk kode. Problemet er, at jeg har et array af nogle outputs, så skal jeg ha lavet mig en maske 'over' de outputs. Da der er mulighed for at mine outputs kan blive flydtet, vil jeg gerne ha, at de kun er specificeret et sted.

Min kode er som følger:

const unsigned int const status[] = { 23, 24, 25 };
const unsigned int status_mask =
  status[0] | status[1] | status[2];

Men det fejler i den sidste af de vedhæftede linier.
error: initializer element is not constant

Kan jeg løse det på en let måde, eller skal jeg har mine outputs 2 steder i koden, lave defines til de enkelte outputs, eller løse det via meta programming, hvilket nk er ret overdrevet for sølle 3 tal :)
Avatar billede hurra Novice
07. maj 2010 - 12:39 #1
Forresten kan problemet forkortes en hel del:

const int a = 1;
const int b = a;

Det giver den samme fejl.
Avatar billede arne_v Ekspert
08. maj 2010 - 01:49 #2
Du har ikke mulighed for at skifte fra C til C++ ?

Koden i #1 compiler fint i C++ !
Avatar billede arne_v Ekspert
08. maj 2010 - 01:52 #3
For C bliver du nok nødt til at lave nogle #define og så lade dine const have de definede værdier.
Avatar billede arne_v Ekspert
08. maj 2010 - 01:53 #4
#define A 1

const int a = A;
const int b = A;
Avatar billede arne_v Ekspert
08. maj 2010 - 01:55 #5
Eller hvis det passer i din logik flytte dem ind i en funktion (det er kun globale variable som har problemet).
Avatar billede hurra Novice
10. maj 2010 - 08:53 #6
Det er et lille embedded system jeg skla lave det til, så c++ er ikke så velset.

Jeg har lavet det som lidt som den define du beskriver nu, det virker godt fint. Det eneste problem er, at under udviklings forløbet konner elementerne i arrayet til at skifte navne og antallet skifter sikkert også (manglende dokumentation).

Den vedligeholdelses lette løsning er at lave det med metaproramming. Det har jeg gjort med en enden del af dette projekt, og virker fint. Gid er der kode mæssigt meget overhead, især når der så kun er 3 elementer i arrayet som her.

Jeg tror konklussionen bliver at jeg venter med at konkludere noget :) men arne_v, kom med et svar.
Avatar billede arne_v Ekspert
10. maj 2010 - 15:18 #7
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester