kalde en funktion fra en abstract base class

Tags:    c++

Hej allesammen,

jeg sidder og laver et lille program hvor jeg skal bruge polymorfisme. Det burde være lige ud af landevejen, men jeg får segmentation fejl når jeg kalder min base class pointer. Se nedenstående kode, hvor jeg har prøvet at reducere alt overflødigt bort:

Fold kodeboks ind/udKode 


Har siddet med det i 3 timer nu - nogen der kan se hvad jeg gør galt?




Indlæg senest redigeret d. 14.01.2008 16:11 af Bruger #8249
6 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Du skal initalisere din p ala

Fold kodeboks ind/udKode 


i din growthFunction constructor.



Indlæg senest redigeret d. 14.01.2008 16:26 af Bruger #1151
Du skal initalisere din p ala

Fold kodeboks ind/udKode 


i din growthFunction constructor.


Hej Martin,
sorry, jeg havde glemt at inkludere constructoren i den kodestump jeg postede. Den ser sådan ud:

Fold kodeboks ind/udKode 

(der er selvfølgelig også klassedeklarationer for de to andre klasser).
Såvidt jeg kan gennemskue skyldes mit problem faktisk at mit growthFunction objekt indgår i et større objekt (Range); dette Range objekt har jeg så puttet i en list<> med push_back() - hvorved altså min destructor bliver kaldt og deleter p. Der var altså ingen mulighed for at svare på spørgsmålet ud fra den kode jeg havde postet :$




Kan du ikke bare tilknytte en default på din switch som sætter din p til 0? Altså så du derved får din pointer til at pege på noget default?



Har du assignment operator og copy constructor for din class?

Disse er vigte at have når class'en har pointere, specielt når du bruger std::containere. For når du push'er et element i din liste vil der ske en kopiering.

Hvis ikke du kan få det til at spille, så lav et komplet eksempel der demonstrerer problemet, så finder vi et fix.



Tak,
jeg skrev først en copy constructor - men så skulle jeg til at tælle p-pointere (?), og så syntes jeg det blev lidt meget kode for ikke at udrette så meget. Jeg endte med bare at knytte growthFunction til en mere overordnet klasse, så den først blev deletet når jeg ikke skulle bruge den længere. Så lige nu fungerer det :) , selvom det giver nogle andre problemer (i forhold til at holde styr på growthFunctions' state, der er forskelligt mellem Range objekter).
Martin >> tak, ja det ville formentlig virke - jeg ville dog være lidt bekymret over at miste kontrollen med hvilken growthFunction der faktisk er aktiv? Hvis nu jeg beder den om en wave function, dummer mig, og pludselig skyldes mit output en lineær funktion.



Indlæg senest redigeret d. 16.01.2008 11:06 af Bruger #8249
Bertel >> My mistake, jeg behøver selvfølgelig ikke tælle pointere hvis jeg laver en ordentlig copy constructor, så den løsning tager jeg. Så blev jeg det klogere :)



t