Herr_Dude Skrevet 9. februar 2004 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.
A_N_K Skrevet 9. februar 2004 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) .
kjetil7 Skrevet 9. februar 2004 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);
Herr_Dude Skrevet 9. februar 2004 Forfatter 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...
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å