我有这个简单的三角形绘制代码,它会产生错误“重新声明 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;
}
如果没有看到确切的 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 是合法的。
我在赛车项目时遇到了
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
。
我也遇到了同样的问题,并将“glut.h”文件中的 wchar_t 变量名称更改为 wchar_tt 并且工作正常。
# ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_tt;
# define _WCHAR_T_DEFINED
# endif
# endif