1

我有这个简单的三角形绘图代码,它会产生错误“重新声明 C++ 内置类型 short”。但是当我放#include<iostream.h>之前#include<glut.h>,它会编译并运行。谁能解释这背后的逻辑?

#include<glut.h>
void renderScene(void) {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
        glVertex3f(-0.5,-0.5,0.0);
        glVertex3f(0.5,0.0,0.0);
        glVertex3f(0.0,0.5,0.0);
    glEnd();

        glutSwapBuffers();
}

int main(int argc, char **argv) {

    // init GLUT and create Window
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(320,320);
    glutCreateWindow("My first program");

    // register callbacks
    glutDisplayFunc(renderScene);

    // enter GLUT event processing cycle
    glutMainLoop();
    
    return 1;
}
4

3 回答 3

3

很难说没有看到您的确切 glut.h 和库版本,但我看到了 glut.h 的回旋处第 45 行:

   /* XXX This is from Win32's <ctype.h> */
#  ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#   define _WCHAR_T_DEFINED
#  endif

如果wchar_t已定义(short例如 to),但_WCHAR_T_DEFINED宏未定义,则该行将被视为:

typedef unsigned short short;

这是对内置类型的重新声明。<iostream>(不要使用 .h 顺便说一句,根据标准不再使用它)正在添加定义以使 typedef 不被执行,或者wchar_t如果它是一个宏以使 typedef 是合法的,则取消定义。

于 2013-04-11T21:37:50.847 回答
2

error redeclaration of c++ built-in type 'wchar_t'我在我的赛车项目时面临。我在谷歌搜索,但没有找到任何解决我的问题的解决方案:-(

但后来,我自己通过包含“windows.h”解决了这个问题:-)

#include<windows.h>
#include<bits/stdc++.h>
#include<GL/glut.h>

#include<windows.h>必须在顶部添加。如果添加在下面glut.h会有错误。

#include<bits/stdc++.h>只是为了安全而添加的:-p

使用#include<GL/glut.h>#include<glut.h>取决于glut.h已放置的文件夹。

于 2017-07-21T13:22:08.317 回答
0

我遇到了同样的问题,将“glut.h”文件中的 wchar_t 变量名更改为 wchar_tt,它工作正常。

#  ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_tt;
#   define _WCHAR_T_DEFINED
#  endif
# endif
于 2021-03-13T08:11:12.057 回答