TListBox *setting = new TListBox (GridLayout1);
setting->Items->LoadFromFile(GetHomePath()+"settings.txt");
if (EventInfo.GestureID == sgiLeft) { //ошибка в этой строке
GridLayout3->Position->X=GridLayout3->Position->X-StrToInt(setting->ItemByIndex(0)->Text);
}
if (EventInfo.GestureID == sgiRight) { //ошибка в этой строке
GridLayout3->Position->X=GridLayout3->Position->X+StrToInt(setting->ItemByIndex(0)->Text);
}
При компиляции под win64 все работает корректно. При компиляции под Android вылетает ошибка:
[bccaarm Error] TabbedTemplate.cpp(635): use of overloaded operator '==' is ambiguous
(with operand types 'const Fmx::Types::TGestureID' and 'const System::Int8'
(aka 'const signed char')) sysmac.h(1167):
candidate function sysmac.h(1167):
candidate function sysmac.h(1167):
candidate function TabbedTemplate.cpp(635): built-in candidate operator==(int, int)
В чем проблема? Как исправить?
Если if не компилируется, а switch компилируется, то можно лишь предположить, что TGestureID - это некий enum для которого перегружен оператор сравнения с каким-нибудь посторонним целочисленным типом
enum TGestureID { A, B, C };
bool operator ==(TGestureID id, long i)
{
return (long) id == i;
}
В такой ситуации получим
int main()
{
TGestureID id = A;
const signed char s = 0;
switch (id) // Все в порядке
{
case s:;
}
if (id == s) // Ошибка: неоднозначная перегрузка оператора `==`
;
}
Здесь можно заставить == компилироваться либо через
if ((int) id == s)
либо через
if (id == (TGestureID) s)
Но судить о том, относится ли это к вашей ситуации, трудно, ибо информации вы практически никакой не предоставляете, а та, что вы предоставили, зачем-то обгрызена до неузнаваемости.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей