Herr_Dude Skrevet 9. februar 2004 Del Skrevet 9. februar 2004 Heisann. Håper noen kan hjelpe meg med dette: Jeg har overstyrt en operator slik: template <class T> T& Matrix<T>::operator( ) ( int i, int j ) { return a[ ( i - 1 ) * c + j - 1 ]; } på denne måten ønsker jeg å få tak i elementer i matrisen min ved ( xPos, yPos ): Matrix<Point2D> splineArray( nMeshPointsX, returnH ); . . . splineArray( j ,k ) = Point2D( x, y ); So far, so good. Nå er saken at jeg vil generere denne matrisen i en funksjon og returnere den. Slik koden er nå er vel matrisen min lokal i funksjonen og "forsvinner" når jeg returnerer på slutten av funksjonen. Jeg prøvde derfor å lage en peker til matrisen ved new, og returnere en peker til matrisen i stedet. Koden jeg brukte var nå: Matrix<Point2D*> *splineArray = new Matrix<Point2D>( nMeshPointsX, returnH ); . . . *splineArray( j ,k ) = new Point2D( x, y ); På denne måten antar jeg nå at objektene mine vil overleve utenfor funksjonen. Men da får jeg følgende beskjed fra kompileren: splineArray' cannot be used as a function. Den tror altså at jeg gjør et funksjonskall, og ikke en akssessering av elementet i ( j, k ). Noen som vet hva jeg kan gjøre med det ? Kan godt være at ting jeg har skrevet her nå ikke henger helt på greip, men har prøvd å beskrive situasjonen slik jeg oppfatter den, slik at det skal være enkelt å rette opp i ting jeg evt har misforstått. Er relativt fersk på bruk av templates, og har vel ikke 100% roen på pekere heller. Lenke til kommentar
A_N_K Skrevet 9. februar 2004 Del Skrevet 9. februar 2004 *splineArray( j ,k ) = new Point2D( x, y ) er ikke helt kurant. Du dereferer resultatet av kallet, i stedet må du putte parenteser rundt objektet (*splineArray); dessuten inneholder vel ikke splineArray pekere? Du burde skrive noe sånt: (*splineArray)(j, k) = Point2D(x, y) . Lenke til kommentar
kjetil7 Skrevet 9. februar 2004 Del Skrevet 9. februar 2004 Operatoren du har overstyrt returnerer en referanse uavhengig om Matrix er laget på stack eller heap. Du prøver å sette Point2D pekeren til referansen som operator() returnerer. Kallet skal være slik: (*splineArray)(j, k) = Point2D(x, y); //...eller splineArray->operator()(j, k) = Point2D(x,y); Lenke til kommentar
Herr_Dude Skrevet 9. februar 2004 Forfatter Del Skrevet 9. februar 2004 Takk for hjelpen. Fungerte med paranteser rundt *splinearray ( fungerte = kompilerte ihvertfall ). Har ikke tid til å teste før senere i dag... 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å