c++ - G++ 警告 : narrowing conversion of

标签 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: warning: narrowing conversion of 'max' from 'int' to 'unsigned int' inside { } 在 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;
}

最佳答案

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

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

关于c++ - G++ 警告 : narrowing conversion of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050866/

相关文章:

c++ - c++ 17中现有类型的过度对齐

c++ - 一个类可以在同一个命名空间中拥有另一个同名的成员吗?

string - 自动将 C 风格字符串解释为 std::string 到 Boost Property 树 .get 函数

c++11 - c++ 中的 vigenere 密码

c - 制作 libcurl CodeLite 项目

c++ - unordered_multimap 在 gnu++11 和 c++0x 中的不同行为

c++ - 将带有模板参数的方法传递给宏

c++ - 使用 -lstdc++fs 选项后使用 GCC6 时出现实验性::文件系统链接器错误

python - 在 Centos 中使用 pip 安装加密 python 库时出错

c++ - 在运行时加载的共享库中使用动态分配的对象时出现段错误