Mon ikke det virker hvis du laver parametrene const?
void SetGeometry(const Coord3D &a, const Coord3D &b)
En lidt længere forklaring: Midlertidige objekter som man opretter i forbindelse med et kald af en funktion, er som udgangspunkt const. Det er sådan set logisk nok, tallene 1, 2, 3 i dit tilfælde er const, man kan ikke modificere dem. Man kan også sige at det ikke rigtigt giver mening at forsøge at modificere midlertidige objekter, hvis man vil modificere noget, må man oprette et objekt.
Disse midlertidige objekter bliver oprettet på stakken, og eksisterer kun så længe funktionskaldet varer.
Du nævner selv tre tilfælde:
Coord3D(1,2,3);
Her sker der (sandsynligvis) intet, der bliver ikke oprettet noget objekt.
Coord3D c(1,2,3);
Her bliver objektet c oprettet på normal vis, med kald til constructoren.
Coord3D d = Coord3D(1,2,3);
Umiddelbart ville man forvente at der blev oprettet et objekt på højreside, som man tog et kopi af, for at oprette d. Men i virkeligheden bliver d konstrueret på præcis samme måde som c ovenfor, så der er ingen forskelle på de to sidste eksempler.
Mange tak for svaret!
At gøre parametrene const løste problemet.
Jeg forstår dog stadig ikke helt hvorfor det er nødvendigt med const. Selvom det oftest er meningsløst at ændre i et midlertidigt objekt, så burde der vel ikke være noget til hindring for at gøre det? Siden Coord3D(1,2,3) objektet jo nødvendigvis må blive lagt på stakken, hvorfor godtages det så ikke med mindre at parameteren er angivet som const?