Buenas tardes chic@s,
Estoy implementando un motor de inferencia y tengo un pequeño problema que me lleva mosqueado un par de días, así que acudo a vosotros para ver si alguien más experimentado que yo en c++ me puede dar indicaciones de donde estoy fallando.
El problema empieza en este método:
El caso es que el objeto bh contenido en la clase MotorDeInferencia llama a su método aplicar. (el parámetro r es una regla con la que construiremos el objeto as).
Hasta ahí todo bien.
El siguiente método es el llamado anteriormente por bh y es aquí donde se construye el objeto.
Este método muestra los valores correctos por pantalla, pero una vez que salimos de este método al de MotorDeInferencia, los accesos al objeto "as" dan valores sin sentido.
No logro entender porque pierdo el objeto al devolverlo. Agradezco muchísimo la ayuda que me pudiesen dar, he probado a cambiar de todo, tanto como cambiar los acceso a los objetos mediante punteros o sin ellos, a devolver en el return contenido[0] (Que es el que me interesa en esa regla), y muchas más cosas.
Saludos.
Estoy implementando un motor de inferencia y tengo un pequeño problema que me lleva mosqueado un par de días, así que acudo a vosotros para ver si alguien más experimentado que yo en c++ me puede dar indicaciones de donde estoy fallando.
El problema empieza en este método:
Código [Seleccionar]
bool MotorDeInferencia::aplicar(Regla* r, Asociacion* as){
cout << "MotorDeInferencia::aplicar()"<<endl;
bool aplicada =bh->aplicar(r, as); //<---------
cout << "as.t" << as->t << endl;
cout <<"Retornando al primer consecuente de la regla: " << r->getId()<<endl;;
cout << "Valor: " << as->valor << endl;
return aplicada;
}
El caso es que el objeto bh contenido en la clase MotorDeInferencia llama a su método aplicar. (el parámetro r es una regla con la que construiremos el objeto as).
Hasta ahí todo bien.
El siguiente método es el llamado anteriormente por bh y es aquí donde se construye el objeto.
Código [Seleccionar]
bool BaseDeHechos::aplicar(Regla* r, Asociacion* as){
cout << "BaseDeHechos::aplicar()"<<endl;
vector<Asociacion> consecuentes=r->getConsecuente();
if(consecuentes.size()==2 &&(isContenido(consecuentes[0])
|| isContenido(consecuentes[1])))
return false;
if(consecuentes.size()==2 && isNegacion(consecuentes[0])){
*as=consecuentes[1];
return true;
}
as=&consecuentes[0];
/* cout << "consecuentes.size:"<<consecuentes.size()<<endl;
cout << "as->t" << as->t << endl;
cout << "as->valor: " << as->valor << endl;*/
return true;
}
Este método muestra los valores correctos por pantalla, pero una vez que salimos de este método al de MotorDeInferencia, los accesos al objeto "as" dan valores sin sentido.
No logro entender porque pierdo el objeto al devolverlo. Agradezco muchísimo la ayuda que me pudiesen dar, he probado a cambiar de todo, tanto como cambiar los acceso a los objetos mediante punteros o sin ellos, a devolver en el return contenido[0] (Que es el que me interesa en esa regla), y muchas más cosas.
Saludos.