Pregunta

Espero que esto no es dolorosamente obvio.Estoy recibiendo este críptico de error :

fold.cpp:92: error: expected primary-expression before ‘)’ token

La línea que se está refiriendo a es:

if (binary_search (corpus.begin(),corpus.end(), left, customArray::operator<(customArray)))

Llegué a este error después de usar el más sencillo llamar a:

if (binary_search (corpus.begin(),corpus.end(), left))

y recibiendo este mensaje de error (la parte importante es la nota al final, diciendo a cambiar a la llamada anterior)

In function ‘bool std::binary_search(_ForwardIterator, _ForwardIterator, const _Tp&)     [with _ForwardIterator = std::_List_iterator<customArray>, _Tp = std::string [3]]’:
fold.cpp:92:   instantiated from here
/usr/include/c++/4.2.1/bits/stl_algo.h:4240: error: no match for ‘operator<’ in ‘__val <    __i. std::_List_iterator<_Tp>::operator* [with _Tp = customArray]()’
/usr/include/c++/4.2.1/bits/stl_algo.h: In function ‘_ForwardIterator   std::lower_bound(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator =   std::_List_iterator<customArray>, _Tp = std::string [3]]’:
/usr/include/c++/4.2.1/bits/stl_algo.h:4239:   instantiated from ‘bool    std::binary_search(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator =   std::_List_iterator<customArray>, _Tp = std::string [3]]’
fold.cpp:92:   instantiated from here
/usr/include/c++/4.2.1/bits/stl_algo.h:2906: error: no match for ‘operator<’ in   ‘__middle. std::_List_iterator<_Tp>::operator* [with _Tp = customArray]() < __val’
fold.cpp:16: note: candidates are: bool customArray::operator<(customArray)

Esencialmente, estoy tratando de usar una búsqueda binaria en una lista enlazada de personalizado (tipo de matriz) de los objetos.El resto del respectivo código está aquí:

// here is the custom class I am using in the list
class customArray
{
public:

  // this is a somewhat lame way to compare, but it seems to work
  bool operator< (customArray temp)
  {
    return array[0] < temp.array[0];
  }

 bool operator> (customArray temp)
  {
    return array[0] > temp.array[0];
  }

  bool operator== (customArray temp)
  {
    return ((array[0] == temp.array[0]) && (array[1] == temp.array[1]) && (array[2] == temp.array[2]));
  }

  string array[3];
};

//All of this stuff is in main

customArray one;
//some processing here to fill one
corpus.push_back (one);

// sort the list 
corpus.sort();
corpus.unique();

string left [3];

if (binary_search (corpus.begin(),corpus.end(), left, customArray::operator<(customArray)))
{

}

Espero que esto es fácil de entender.Déjeme saber si hay alguna manera de que yo pueda aclarar.

¿Fue útil?

Solución

Su primer mensaje de error fue debido a binary_search utiliza < en los iteradores, pero la lista de los iteradores no apoyo <.Este error no tiene nada que ver con si o no usted pase una comparación de la función como un argumento para binary_search.

Su segundo mensaje de error es porque especificó el tipo cuando se pasa a la función como un argumento.Eso es básicamente el mismo que el de llamar a una función como f(int x) en lugar de f(x), que es sintácticamente incorrecta.Debería ser simplemente customArray::operator<.Sin embargo, como he dicho antes, que no ayuda a usted porque usted acaba de obtener el primer mensaje de error de nuevo.

Básicamente, usted no puede realizar una búsqueda binaria en una lista enlazada.

Otros consejos

Usted está poniendo toda la firma de su Functor dentro de su llamada a Binary_Search.No necesitas el 'BOOL' allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top