G ++警告:缩小转换率

时间:2014-01-10 17:40:48

标签: c++ c++11 gcc warnings narrowing

我正在尝试从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;
}

1 个答案:

答案 0 :(得分:3)

首先这是“仅”一个警告,所以如果您了解背后发生的事情,您可能会忽略它。此处,值int max(已签名)将自动转换为unsigned int

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