Frage

Ich hoffe, das ist nicht schmerzhaft offensichtlich.Ich erhalte diesen kryptischen Fehler:

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

Die Zeile, auf die es sich bezieht, ist:

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

Ich bin zu diesem Fehler gekommen, nachdem ich den einfacheren Aufruf verwendet habe:

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

und diese Fehlermeldung erhalten (der wichtige Teil ist der Hinweis am Ende, der besagt, dass man ihn in den obigen Aufruf ändern soll)

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)

Im Wesentlichen versuche ich, eine binäre Suche für eine verknüpfte Liste benutzerdefinierter Objekte (Array-Typ) zu verwenden.Der Rest des relevanten Codes ist hier:

// 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)))
{

}

Ich hoffe, das ist leicht zu verstehen.Lassen Sie mich wissen, ob ich das auf irgendeine Weise klären kann.

War es hilfreich?

Lösung

Ihre erste Fehlermeldung war, weil binary_search Verwendet < auf den Iteratoren, aber die Iteratoren der Liste werden nicht unterstützt <.Dieser Fehler hat nichts damit zu tun, ob Sie eine Vergleichsfunktion als Argument übergeben oder nicht binary_search.

Ihre zweite Fehlermeldung kommt daher, dass Sie den Typ angegeben haben, als Sie die Funktion als Argument übergeben haben.Das ist im Grunde dasselbe wie der Aufruf einer Funktion als f(int x) anstatt f(x), was syntaktisch falsch ist.Es sollte einfach so sein customArray::operator<.Wie ich bereits sagte, hilft Ihnen das jedoch nicht weiter, da Sie nur wieder die erste Fehlermeldung erhalten.

Grundsätzlich können Sie keine binäre Suche für eine verknüpfte Liste durchführen.

Andere Tipps

Sie setzen die gesamte Unterschrift Ihres Functors in Ihren Anruf an Binary_Search.Sie brauchen dort nicht den "BOOL".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top