G++ 警告:缩小转换范围

use*_*829 5 c++ gcc warnings narrowing c++11

我正在尝试从sourceforge 编译hosts3d,它确实可以编译,但会生成几个缩小错误。我不知道如何解决这个问题,但任何帮助将不胜感激。我怀疑我可以下载以前版本的编译器,我可能最终会这样做,但现在...... 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 中格式不正确 [-Wnarrowing] glin_obj glin = {GLWIN_INPUT ,lastWin,lower,names++,left,top,cwidth,strlen(text),(strlen(text)>cwidth?strlen(text)-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;
}
Run Code Online (Sandbox Code Playgroud)

小智 3

首先,这“只是”一个警告,因此如果您了解后面发生的情况,您可能可以忽略它。这里的值int max(带符号)将自动转换为unsigned int.

其次,由于该函数AddInput似乎是 API 的一部分,因此您无法修改该函数的签名。因此,如果您确实想删除警告(而不删除前面解释的效果),您可以使用 强制强制转换(unsigned int)max