В C одинарные кавычки используются для обозначения единичных (буквальных) символьных констант, а результирующий тип таких констант равен int
. Итак, 'a'
- это нормально, 'a1'
- нет, потому что это два символа. C определяет некоторые escape-последовательности, например '\n'
, который обрабатывается как один символ, обозначающий новую строку, или '\xff'
, который является символом с шестнадцатеричным значением 0xff
. Поскольку 'test.jpg'
содержит более одного символа, компилятор сообщает вам, что ваша константа литерального символа слишком длинная. Вы хотите строку, которая нуждается в двойных кавычках.
Вам необходимо заключить в скобки скобки: (const char *)x
- это нормально, const char * x
- нет (хорошо, если вы объявите x
как const char *
). Я думаю, что вы добавили это преобразование, потому что компилятор предупреждал вас о "преобразовании int в указатель без преобразования". В общем, если вы действительно не знаете, что делаете, приведение компилятора в тишину - очень плохая идея.
Исходя из вышеизложенного, строка 34 должна быть:
image = cvLoadImage("test.jpg", iscolor);
Если вы действительно хотите разыграть "test.jpg"
как const char *
, выполните:
image = cvLoadImage((const char *)"test.jpg", iscolor);
Также теперь вы знаете, как исправить эту строку:
int cvSaveImage(const char* 'modified.jpg', const CvArr* image);