在Dev C ++中出现错误“重新声明C ++内置类型`short'”

时间:2013-04-11 20:25:11

标签: c++ opengl compiler-construction glut dev-c++

我是C ++中GLUT的初学者。我使用Dev C ++作为我的IDE。我有这个简单的三角形绘图代码,它产生一个错误“重新声明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;
}

3 个答案:

答案 0 :(得分: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不被执行,或者如果它是一个宏而不定义wchar_t,那么typedef是合法的。

答案 1 :(得分:0)

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

但后来,我通过包含&#34; windows.h&#34;解决了这个问题。我自己: - )

#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所在的文件夹。

答案 2 :(得分:0)

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

  @Injectable({
        providedIn: 'root'
    })
    export class ShareDataService {
        constructor(private router: Router) {
    
        }
        private content = new BehaviorSubject<any>([]);
        setQuery(v) {
            this.content.next(v);
        }
    
        getQuery(): Observable<any> {
            return this.content.value;
        }
    
        passQuery(qp: {}) {
            this.router.events.subscribe((event) => {
                if (event instanceof NavigationStart) {
                    this.setQuery(qp);
                }
            });
        }
}