La Web del Programador: Comunidad de Programadores
 
    Pregunta:  18890 - STL: CLASE VALARRAY
Autor:  Cristina Campos Merino
Hola,

Cuando compilo lo siguiente:

bool EsPrimo(valarray<int>& num)
{
valarray<int> contador (3);

contador=1;

if (num % contador == 0)
...
}

... me da el error:

error C2451: conditional expression of type 'class std::valarray<bool>' is illegal
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Los operadores % y == estan definidos en la clase valarray, ya que es propia de la STL de C. Estoy utilizando Visual C++ 5.0 ¿Alquien sabe a qué puede ser debido este error?

Gracias.

  Respuesta:  Reynaldo Hidalgo
lo que te pasa es que al hacer : if (num % contador == 0)
estas llamando a la funcion de valarray :
template <class T> valarray<bool>
operator==(const valarray<T>& lhs, T& rhs);
que lo que devuelve no es un bool sino un valarray<bool>
y no hay funcion de conversion definida para estos tipos, si lo que quieres es chequear que el valarray<bool> tenga todos sus elementos a cero, se pueden buscar soluciones alternativas.
como consejo, no dejes de usar y conocer la STL que es una herramienta potentisima.