Problema con un código en C++

Aziwar

Buenas! Pues vereis tengo que realizar una serie de operaciones básicas con vectores (sumar, multiplicar...), para lo cúal tengo que sobrecargar las funciones.

La sobrecarga que tengo hecha para la suma es

spoiler

Entonces en el programa principal tengo los datos de 2 vectores (que los muestra bien), y creo un tercer vector y hago c = a + b, entrando entonces en el código de la sobrecarga.

Los cout de dicho código los puse como guía, porque el problema en cuestión es que si por ejemplo tengo a = 1,2,3 y b = 4,5,6; al salir de la operación me sale como que el vector C es 0,7,9. Como si no me almacenara la primera posicion, pero si lo hace pues lo muestra en dichos cout. Además que justo en el cout final antes de terminar la función muestra el vector completo.

La sobrecarga del cout es

spoiler

Pero no creo que sea problema de eso ya que tanto en el programa principal cuando pido los datos, como dentro del código del operator + muestra bien los vectores.

Que puede ser?

Puni

Tienes constructor de copia? porque si mal no recuerdo la asignacion (c = a + b) hace copias bit a bit de las cosas, que en tu caso con recursos adicionales reservados produciria resultados aleatorios cuanto menos.

Aziwar

En los apuntes encontré este constructor de copia

TVector :: TVector(TVector &v){
	tam_ = v.tam_;
	base_ = new int[tam_];
	for (int i = 0; i < tam_; i++)
	    base_[i] = v.base_[i];
}

Pero nada donde hago la asignación de vectortmp = vector1 + vector2 (es decir lo de c = a + b), ahora me salta un error diciendome "no se encontró una función coincidente para la llamada a ‘TVector::TVector(TVector)’ "

Y si lo paso como punteros no me da error, pero me sale lo mismo que sin constructor de copia.

Poisonous

Mas que el constructor de copia necesitas sobrecargar la asignación, si no lo unico que haces es igualar las referencias

JuAn4k4

Pon el vector c como parametro por referencia.

La asignación la hace bien ya que lo hace elemento a elemento, pero a un objeto local "c"

Aziwar

al final le quite todo lo relacionado con puntero y lo hice con un vector estático xD

mañana pruebo eso de pasar c como &c a ver

Usuarios habituales

  • Aziwar
  • JuAn4k4
  • Poisonous
  • Puni