Я пытаюсь скомпилировать hosts3d из sourceforge, и он компилируется, но выдает несколько сужающих ошибок. Я понятия не имею, как это исправить, но любая помощь будет принята с благодарностью. Я подозреваю, что мог бы загрузить предыдущую версию компилятора, и я мог бы в конечном итоге сделать это, но пока … c ++ 11
g ++ -Wall -O2 -c -o src / glwin.o src / glwin.cpp src / glwin.cpp: в функции-члене
‘int MyGLWin :: AddInput (int, int, unsigned int, int, const char *, bool)’:
SRC / glwin.cpp: 983: 147: предупреждение: сужение преобразования ‘max’ из ‘int’ в ‘unsigned int’ внутри {} неправильно сформирован в C ++ 11 [-Wararrowing] glin_obj glin = {GLWIN_INPUT, lastWin, нижний, names ++, левый, верхний, cwidth, strlen (текст), (strlen (текст)> cwidth? strlen (текст ) — cwidth: 0), max};
//create input object, return name of input object
int MyGLWin::AddInput(int left, int top, unsigned int cwidth, int max, const char *text, bool lower)
{
if (!lastWin) return -1; //check parent window object exists
glin_obj glin = {GLWIN_INPUT, lastWin, lower, names++, left, top, cwidth, strlen(text), (strlen(text) > cwidth ? strlen(text) - cwidth : 0), max};
strcpy(glin.text, text); //default text
currInput = glin.name; //set input object focus (for keys)
lastInput = (glin_obj *)GLWinLL.Write(new glin_obj(glin));
return glin.name;
}
Во-первых, это «только» предупреждение, поэтому вы можете игнорировать его, если понимаете, что происходит позади. Здесь значение int max
(подписано) будет автоматически преобразовано в unsigned int
,
Во-вторых, как функция AddInput
кажется, является частью API, вы не можете изменить сигнатуру функции. Так что, если вы действительно хотите удалить предупреждение (не удаляя эффект, описанный ранее), вы можете вызвать приведение с (unsigned int)max
,
Других решений пока нет …