Hi jungs, ...
ich hwollte mri für Linux ein Programm neu Kompilieren, da es nicht als Paket für Fedora Core 5 gedacht ist. Nun ich musste in dem Programm shcone iniges abändern, da die gcc 4.1.0 includes wohl etwas von den vorherigen abweichen, doch bin ich leider an einem Punkt gekommen den ich nicht lösen kann.
In der KeyRange.h meiner Datei die ich kompilieren möchte findet sich folgender Code:
Beim kompilieren bekomme ich nun die Fehlermeldung ...
Ich weiß also das das Problem mit der stl_list.h zusammenhängt, ich glaube auch zu wissen das der vergleich von NuLL mit einem Operator der bool zurück gibt die Probleme macht, aber ich kann auch mit einem boolschen false oder true nichts bewirken, ich stehe also im dunkeln dieses Problem zu lösen.
Über Hilfen würde ich mich natürlich sehr freuen.
Greeeeez Jenna
ich hwollte mri für Linux ein Programm neu Kompilieren, da es nicht als Paket für Fedora Core 5 gedacht ist. Nun ich musste in dem Programm shcone iniges abändern, da die gcc 4.1.0 includes wohl etwas von den vorherigen abweichen, doch bin ich leider an einem Punkt gekommen den ich nicht lösen kann.
In der KeyRange.h meiner Datei die ich kompilieren möchte findet sich folgender Code:
Code:
#ifndef KEYRANGE_H
#define KEYRANGE_H
struct KeyRange {
int owner;
int start;
int end;
};
class KeyRangeList : public std::list<struct KeyRange> {
public:
void AddKey(int owner, int keycode)
{
if (IsInList(keycode))
return;
iterator i = FindRange(owner, keycode - 1);
iterator j = FindRange(owner, keycode + 1);
if ((i != NULL) && (j != NULL))
{
/* merge both items */
erase(j);
i->end = j->end;
}
else
{
if (i != NULL)
{
i->end = keycode;
}
else if (j != NULL)
{
j->start = keycode;
}
else
{
struct KeyRange k;
k.owner = owner;
k.start = keycode;
k.end = keycode;
push_back(k);
}
}
}
void RemoveKey(int owner, int keycode)
{
iterator i = FindRange(owner, keycode);
if (i == NULL)
return;
if (i->start == i->end)
erase(i);
else
{
if (keycode == i->start)
i->start = keycode+1;
else if (keycode == i->end)
i->end = keycode-1;
else
{
/* split range */
struct KeyRange k;
k.owner = owner;
k.start = i->start;
k.end = keycode-1;
i->start = keycode+1;
push_back(k);
}
}
}
void RemoveKeys(int owner)
{
iterator i = begin();
while (i != end())
{
if (i->owner == owner)
{
iterator j = i;
i++;
erase(j);
}
else
i++;
}
}
bool IsInList(int keycode)
{
return FindRange(-1, keycode) != NULL;
}
private:
iterator FindRange(int owner, int keycode)
{
for (iterator i = begin(); i != end(); i++)
{
if ((keycode >= i->start) && (keycode <= i->end))
{
if ((i->owner == owner) || (owner == -1))
return i;
}
}
return NULL;
}
};
#endif
Beim kompilieren bekomme ich nun die Fehlermeldung ...
Code:
KeyRange.h: In member function »void KeyRangeList::AddKey(int, int)«:
KeyRange.h:19: Fehler: no match für »operator!=« in »i != 0«
/usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/bits/stl_list.h:173: Anmerkung: Kandidaten sind: bool std::_List_iterator<_Tp>::operator!=(const std::_List_iterator<_Tp>&) const [with _Tp = KeyRange]
KeyRange.h:19: Fehler: no match für »operator!=« in »j != 0«
/usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/bits/stl_list.h:173: Anmerkung: Kandidaten sind: bool std::_List_iterator<_Tp>::operator!=(const std::_List_iterator<_Tp>&) const [with _Tp = KeyRange]
KeyRange.h:27: Fehler: no match für »operator!=« in »i != 0«
/usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/bits/stl_list.h:173: Anmerkung: Kandidaten sind: bool std::_List_iterator<_Tp>::operator!=(const std::_List_iterator<_Tp>&) const [with _Tp = KeyRange]
KeyRange.h:31: Fehler: no match für »operator!=« in »j != 0«
/usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/bits/stl_list.h:173: Anmerkung: Kandidaten sind: bool std::_List_iterator<_Tp>::operator!=(const std::_List_iterator<_Tp>&) const [with _Tp = KeyRange]
KeyRange.h: In member function »void KeyRangeList::RemoveKey(int, int)«:
KeyRange.h:49: Fehler: no match für »operator==« in »i == 0«
/usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/bits/stl_list.h:169: Anmerkung: Kandidaten sind: bool std::_List_iterator<_Tp>::operator==(const std::_List_iterator<_Tp>&) const [with _Tp = KeyRange]
KeyRange.h: In member function »bool KeyRangeList::IsInList(int)«:
KeyRange.h:90: Fehler: no match für »operator!=« in »KeyRangeList::FindRange(-0x000000001, keycode) != 0«
/usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/bits/stl_list.h:173: Anmerkung: Kandidaten sind: bool std::_List_iterator<_Tp>::operator!=(const std::_List_iterator<_Tp>&) const [with _Tp = KeyRange]
KeyRange.h: In member function »std::_List_iterator<KeyRange> KeyRangeList::FindRange(int, int)«:
KeyRange.h:103: Fehler: Umwandlung von »int« in nicht-skalaren Typen »std::_List_iterator<KeyRange>« angefordert
Ich weiß also das das Problem mit der stl_list.h zusammenhängt, ich glaube auch zu wissen das der vergleich von NuLL mit einem Operator der bool zurück gibt die Probleme macht, aber ich kann auch mit einem boolschen false oder true nichts bewirken, ich stehe also im dunkeln dieses Problem zu lösen.
Über Hilfen würde ich mich natürlich sehr freuen.
Greeeeez Jenna