[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
porting error I don't understand
From: |
mark |
Subject: |
porting error I don't understand |
Date: |
12 May 2005 05:20:15 -0700 |
User-agent: |
G2/0.2 |
Hi,
recently I revisited some code I wrote a few years ago using the
Borland c++ 3.0 compiler. I'm in the middle of porting the code to g++
{gcc version 3.3.4 (pre 3.3.5 20040809)} and I'm stuck with a specific
error I just don't seem to understand.
The error I get is:
mchpoly.cpp: In function `Vector CharacteristicPolynom(Matrix&)':
mchpoly.cpp:71: error: no match for 'operator=' in 'Y =
ProductMatrix(Matrix&,
Matrix&)((&Y))'
matrix.h:142: error: candidates are: Matrix& Matrix::operator=(Matrix&)
The corresponding line is:
...
...
...
do {
for( R = 1; R <= N; R++ ) /* create random Y0 */
VectorElement( Y, R ) = complex( rand() % 10, rand() % 10 );
for( R = 1; R <= N; R++ ) /* for each row ... */
{
for( C = 1; C <= N; C++ ) /* add Yn to T */
MatrixElement( T, C, N - R + 1 ) = VectorElement( Y, C );
=====>>>> Y = ProductMatrix( M, Y ); /* calculate new Yn
*/
}
DoGaussJordan( T, Y ); /* solve the equation into Y */
I--;
} while( ( MatrixElement( T, N, N ) != ONE_CMPLX ) && ( I ) );
...
...
...
The definition of the ProductMatrix function is:
Matrix ProductMatrix( Matrix& A, Matrix& B )
{
Matrix Prod;
unsigned R, C, k;
unsigned PR, PC, AC;
...
...
...
return( Prod );
}
Moreover, the class definition of Matrix contains:
class Matrix { public: /* def of a matrix */
// constructors
Matrix( void );
...
...
...
// overloaded operators
Matrix& operator=( Matrix& A );
...
...
...
}
The reason why in operator= the A matrix is passed as a reference is
because the operator= is used to "pass-through" memory from A to *this
by copying a pointer. In A however, the pointer should be set to 0 (or
NULL) in order to make sure that the calling of the destructor of A
doesn't free the memory. So in short the operator= changes Matrix *this
as well as Matrix A.
As far as I understand, the compiler is not able to find a correct
operator= function, yet I think I've defined and implemented one.
Moreover, I've noticed that the function reference in the error
contains an "((&Y))" part, something I didn't expect. What's the deal
with that?
Could anyone give a clue on this?
As a side note: the code compiled fine of course with Borland, Cray and
MIPS c++ compilers three years ago. It doesn't however with g++ and the
newly available Intel C++ compiler.
best regards,
mark somers.
- porting error I don't understand,
mark <=