2014-01-10 38 views
4

我想从sourceforge编译hosts3d,它编译但产生了几个缩小的错误。我不知道如何解决这个问题,但任何帮助将不胜感激。我怀疑我可以下载以前版本的编译器,我可能最终会这样做,但现在... ... C++ 11G ++警告:缩小转换的

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从'int'到'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; 
} 
+1

看到这个问题[这里](http://stackoverflow.com/q/31685132/1708801)在{}中缩小转换在C++ 11中不合格,但以前不是。几个版本的海湾合作委员会作出警告,但目前是一个错误。 –

回答

2

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

其次,由于函数AddInput似乎是API的一部分,因此无法修改该函数的签名。所以如果你真的想删除这个警告(不去除之前解释的效果),你可以用(unsigned int)max强制施放。

+0

是的,这有很大的帮助,我刚开始使用MINGW并看到这个警告,并且我看到了其他人强制转换的例子,但在API中没有int。我很开心修改一些开源代码。 这导致我读这个和这个。 http://stackoverflow.com/questions/4975340/int-to-unsigned-int-conversion http://stackoverflow.com/questions/50605/signed-to-unsigned-conversion-in-c-is-它始终安全 http://stackoverflow.com/questions/809227/is-it-safe-to-use-1-to-set-all-bits-to-true 再次感谢,乔 – user3182829

+0

@ user3182829你介意接受我的回答吗? :) –