/ / Sobrecargar el operador de entrada con una matriz de punteros - c ++, punteros

Sobrecargar el operador de entrada con una matriz de punteros - c ++, punteros

para un proyecto de clase tengo una matriz 2D de punteros. Entiendo a los constructores, destructores, etc., pero tengo problemas para entender cómo configurar los valores en la matriz. Estamos utilizando el operador de entrada sobrecargado para ingresar los valores. Aquí está el código que tengo para ese operador hasta ahora:

istream& operator>>(istream& input, Matrix& matrix)
{
bool inputCheck = false;
int cols;

while(inputCheck == false)
{
cout << "Input Matrix: Enter # rows and # columns:" << endl;

input >> matrix.mRows >> cols;
matrix.mCols = cols/2;

//checking for invalid input
if(matrix.mRows <= 0 || cols <= 0)
{
cout << "Input was invalid. Try using integers." << endl;
inputCheck = false;
}
else
{
inputCheck = true;
}

input.clear();
input.ignore(80, "n");
}

if(inputCheck = true)
{
cout << "Input the matrix:" << endl;

for(int i=0;i< matrix.mRows;i++)
{
Complex newComplex;
input >> newComplex;
matrix.complexArray[i] = newComplex; //this line
}
}
return input;
}

Obviamente la declaración de asignación que tengo aquí esincorrecto, pero no estoy seguro de cómo se supone que funciona. Si es necesario que incluya más código, avíseme. Así es como se ve el constructor principal:

Matrix::Matrix(int r, int c)
{
if(r>0 && c>0)
{
mRows = r;
mCols = c;
}
else
{
mRows = 0;
mCols = 0;
}

if(mRows < MAX_ROWS && mCols < MAX_COLUMNS)
{
complexArray= new compArrayPtr[mRows];

for(int i=0;i<mRows;i++)
{
complexArray[i] = new Complex[mCols];
}
}
}

y aquí está Matrix.h para que pueda ver los atributos:

class Matrix
{
friend istream& operator>>(istream&, Matrix&);

friend ostream& operator<<(ostream&, const Matrix&);

private:
int mRows;
int mCols;
static const int MAX_ROWS = 10;
static const int MAX_COLUMNS = 15;
//type is a pointer to an int type
typedef Complex* compArrayPtr;
//an array of pointers to int type
compArrayPtr *complexArray;

public:

Matrix(int=0,int=0);
Matrix(Complex&);
~Matrix();
Matrix(Matrix&);

};
#endif

el error que "obtengo es" no se puede convertir de Complex a Matrix :: compArrayPtr (también conocido como Complex *) en la asignación "Si alguien puede explicar lo que estoy haciendo mal, estaré muy agradecido.

Respuestas

1 para la respuesta № 1

Tu newComplex es un objeto de tipo Complex (un valor) y tratas de asignarlo a un Complex* puntero.

Para que esto funcione debes construir un complejo dinámicamente:

Complex* newComplex = new Complex();
input >> *newComplex;
matrix.complexArray[i] = newComplex;

Pero tenga en cuenta todas las consecuencias que vienen con la asignación dinámica (gestión de memoria, propiedad, estado compartido ...).