【问题标题】:G++ warning: narrowing conversion ofG ++警告:缩小转换
【发布时间】:2014-01-29 19:30:24
【问题描述】:

我正在尝试从 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:警告:在 C++11 [-Wnarrowing] 中,将 {} 内的 'max' 从 'int' 缩小到 'unsigned int' 的转换是不正确的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;
}

【问题讨论】:

  • 见这个问题here 缩小转换{} 在 C++11 中格式不正确,但以前不是。多个版本的 gcc 将其作为警告,但目前是一个错误。

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


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多