Gå til innhold

Problemer med peker og egendefinert operator


Anbefalte innlegg

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
Videoannonse
Annonse

*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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...