Столкнулся с такой непонятной ошибкой при компиляции кода:
error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
Красным выделена строка. где обнаружена ошибка.
int ShowGround(char** GR)
{char **TempGround;
TempGround=GR;
for (int i=0;i<10;i++)
{for (int k=0;k<10;k++)
{if (TempGround[i][k]=="0") printf(".");
else printf("X");
}
printf("\n");
}
return 0;
}
Порылся в нете и понял, что в отличии от PHP, где и символы и строки можно ограничивать и двойными кавычками и одинарными, в С++ двойные кавычки полагаются только строкам. А символы не доросли еще до двойных. :о) Для них только одинарные допустимы. :о)
Т.е. правильно должно быть так:
Хотя почему в printf проходит "." не совсем понятно. Похоже, что ограничения к кавычкам срабатывают только при сравнении.
error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
Красным выделена строка. где обнаружена ошибка.
int ShowGround(char** GR)
{char **TempGround;
TempGround=GR;
for (int i=0;i<10;i++)
{for (int k=0;k<10;k++)
{if (TempGround[i][k]=="0") printf(".");
else printf("X");
}
printf("\n");
}
return 0;
}
Порылся в нете и понял, что в отличии от PHP, где и символы и строки можно ограничивать и двойными кавычками и одинарными, в С++ двойные кавычки полагаются только строкам. А символы не доросли еще до двойных. :о) Для них только одинарные допустимы. :о)
Т.е. правильно должно быть так:
if (TempGround[i][k]=='0') printf(".");
По-моему, всё логично.
ОтветитьУдалитьЭррор логичен: обозначенная кавычками строка есть указатель на char, а указатель нельзя сравнить с самим числом-символом char.
Исправление логично: в апострофах char, и он сравнивается с char.
Прокат printf тоже логичен: у него первый параметр строго строка, а строка может состоять и из одного эффективного символа, и вообще их не содержать ("").
Между прочим, в C/C++ строки всегда заканчиваются символом с кодом 0 (нуль-терминатором). Поэтому '.' и "." суть разные вещи. Первая - тупо символ. Вторая - указатель на строку из двух байт: первый - эффективный символ, второй - нуль-терминатор.
Исчерпывающее объяснение. :о)) Большое спасибо. :о)))
ОтветитьУдалить