Dev C++ 中的过剩错误“重新声明 C++ 内置类型‘short’”

问题描述 投票:0回答:3

我有这个简单的三角形绘制代码,它会产生错误“重新声明 C++ 内置类型短”。但是当我将

#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;
}
c++ opengl glut dev-c++
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
),但
_WCHAR_T_DEFINED
宏尚未定义,则该行将被视为:

typedef unsigned short short;

这是内置类型的重新声明。

<iostream>
(不要使用 .h 顺便说一句,它不再按照标准使用)正在添加定义,以便 typedef 不被执行,或者 undef'ing
wchar_t
如果它是一个宏,这样 typedef 是合法的。


3
投票

我在赛车项目时遇到了

error redeclaration of c++ built-in type 'wchar_t'
。我在 Google 中搜索,但没有找到任何解决方案来解决我的问题:-(

但是后来我自己通过包含“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


0
投票

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

#  ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_tt;
#   define _WCHAR_T_DEFINED
#  endif
# endif
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.