2016-03-23 19 views
0

私はOpenGLとC++のプロジェクトに問題があります。C++問題:矛盾する宣言

point3 r1 = point3(40.0,0.0,-450.0); 
    point3 r2 = point3(55.0,0.0,-450.0); 
    point3 r3 = point3(55.0,0.5,-450.0); 
    point3 r4 = point3(40.0,0.5,-450.0); 

    point3 r[4]; 
    r[0] = r1; 
    r[1] = r2; 
    r[2] = r3; 
    r[3] = r4;  
    rails(r); 

Point3とは、頂点を表すオブジェクトである:私のファイルで 「cube.cppを」私はこれを持っています。 Railsは3Dレールを描くオブジェクトです。

g++ Struct.cpp skybox.cpp rails.cpp cube.cpp -o train 
cube.cpp: 
In function ‘void display()’: 
cube.cpp:296:11: error: conflicting declaration ‘rails r’ 
    rails(r); 
     ^
cube.cpp:291:11: error: ‘r’ has a previous declaration as ‘point3 r [4]’ 
    point3 r[4]; 
     ^

私は私の友人に尋ねたが、それはレール(r)をコンパイルしたくないなぜ我々が見つからない、以前に私が持っていた: 問題は、私は私のプロジェクトをコンパイルしたい場合、私はこれを持っていますSkyboxクラスを作成し、同じタイプの引数を持つこのクラスを正しく動作させます。

誰もがアイデア...

編集している場合: rails.h

#ifndef RAILS_H_ 
#define RAILS_H_ 

#include "Struct.h" 

using namespace std; 

class rails{ 

public: 

    rails(point3[]); 

}; 
#endif /* RAILS_H_ */ 

そしてrails.cpp

#include "rails.h" 

#ifdef __APPLE__ 
//compilation sous MacOs par : 
//gcc -framework GLUT -framework OpenGL -framework Cocoa source.c -o nom_executable 
    #include <OpenGL/gl.h> 
    #include <OpenGL/glu.h> 
    #include <GLUT/glut.h> 
#endif 

#ifdef __WIN32__ 
//parce qu'il manque des choses aux gens qui utilisent MsWindows, où OpenGL ne peut fonctionner que s'il discute avec le gestionnaire de fenêtres ("windows.h") 
    #define GLUT_DISABLE_ATEXIT_HACK //utile si vous compilez en g++ sous windows avec le glut.lib prévu pour MsVisual 
    #include <windows.h> 
    #include "glut.h" //il faut avoir le fichier "glut.h" dans le même répertoire que votre .cpp (et aussi le glut.lib et le glut.dll) 
#endif 

#ifdef __linux__ 
    //pour les non-windowiens, GLUT (fenêtrage opengl) est inclu dans les distributions 
    //pour les ubuntiens : apt-get install freeglut3 freeglut3-dev 
    #include <GL/glut.h> 
    #include <GL/glu.h> 
#endif 

rails::rails(point3 rd[]){ 
    float dis = 0.0; 
    while(dis < 900){ 
      glBegin(GL_QUADS); 
       glColor3ub(90,0,0); 
       glVertex3d(rd[0].x,rd[0].y,rd[0].z+dis); 
       glVertex3d(rd[1].x,rd[1].y,rd[1].z+dis); 
       glVertex3d(rd[2].x,rd[2].y,rd[2].z+dis); 
       glVertex3d(rd[3].x,rd[3].y,rd[3].z+dis); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,0,0); 
       glVertex3d(rd[0].x,rd[0].y,rd[0].z+2.0+dis); 
       glVertex3d(rd[1].x,rd[1].y,rd[1].z+2.0+dis); 
       glVertex3d(rd[2].x,rd[2].y,rd[2].z+2.0+dis); 
       glVertex3d(rd[3].x,rd[3].y,rd[3].z+2.0+dis); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,0,0); 
       glVertex3d(rd[3].x,rd[3].y,rd[3].z+dis); 
       glVertex3d(rd[2].x,rd[2].y,rd[2].z+dis); 
       glVertex3d(rd[2].x,rd[2].y,rd[2].z+2.0+dis); 
       glVertex3d(rd[3].x,rd[3].y,rd[3].z+2.0+dis); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,0,0); 
       glVertex3d(rd[0].x,rd[0].y,rd[0].z+dis); 
       glVertex3d(rd[3].x,rd[3].y,rd[3].z+dis); 
       glVertex3d(rd[3].x,rd[3].y,rd[3].z+2.0+dis); 
       glVertex3d(rd[0].x,rd[0].y,rd[0].z+2.0+dis); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,0,0); 
       glVertex3d(rd[1].x,rd[1].y,rd[1].z+dis); 
       glVertex3d(rd[2].x,rd[2].y,rd[2].z+dis); 
       glVertex3d(rd[2].x,rd[2].y,rd[2].z+2.0+dis); 
       glVertex3d(rd[1].x,rd[1].y,rd[1].z+2.0+dis); 
      glEnd(); 
      dis=dis+5.0; 
     } 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(54.0,0.0,-450.0); 
       glVertex3d(53.5,0.0,-450.0); 
       glVertex3d(53.5,1.0,-450.0); 
       glVertex3d(54.0,1.0,-450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(54.0,0.0,450.0); 
       glVertex3d(53.5,0.0,450.0); 
       glVertex3d(53.5,1.0,450.0); 
       glVertex3d(54.0,1.0,450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(54.0,1.0,-450.0); 
       glVertex3d(53.5,1.0,-450.0); 
       glVertex3d(53.5,1.0,450.0); 
       glVertex3d(54.0,1.0,450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(54.0,0.0,-450.0); 
       glVertex3d(54.0,1.0,-450.0); 
       glVertex3d(54.0,1.0,450.0); 
       glVertex3d(54.0,0.0,450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(53.5,0.0,-450.0); 
       glVertex3d(53.5,1.0,-450.0); 
       glVertex3d(53.5,1.0,450.0); 
       glVertex3d(53.5,0.0,450.0); 
      glEnd(); 

      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(41.0,0.0,-450.0); 
       glVertex3d(41.5,0.0,-450.0); 
       glVertex3d(41.5,1.0,-450.0); 
       glVertex3d(41.0,1.0,-450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(41.0,0.0,450.0); 
       glVertex3d(41.5,0.0,450.0); 
       glVertex3d(41.5,1.0,450.0); 
       glVertex3d(41.0,1.0,450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(41.0,1.0,-450.0); 
       glVertex3d(41.5,1.0,-450.0); 
       glVertex3d(41.5,1.0,450.0); 
       glVertex3d(41.0,1.0,450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(41.0,0.0,-450.0); 
       glVertex3d(41.0,1.0,-450.0); 
       glVertex3d(41.0,1.0,450.0); 
       glVertex3d(41.0,0.0,450.0); 
      glEnd(); 
      glBegin(GL_QUADS); 
       glColor3ub(90,90,90); 
       glVertex3d(41.5,0.0,-450.0); 
       glVertex3d(41.5,1.0,-450.0); 
       glVertex3d(41.5,1.0,450.0); 
       glVertex3d(41.5,0.0,450.0); 
      glEnd(); 
} 
+1

'rails'とは何ですか?あなたは、[最小、完全で、かつ実証可能な例](http://stackoverflow.com/help/mcve)を作成して私たちを見せてください。あるいは、少なくとももう少しコンテキストを表示する( 'display'関数全体のように)? –

+0

件名にrails.hとrails.cppを追加しました。表示機能が長すぎる私の目標は他のクラスでもこの機能をカットしていると思う。 – BlaCkOmN

答えて

2

現在、名前付きrailsオブジェクトを作成しようとしているがr

コンストラクタを呼び出すためにrailsオブジェクトの名前を追加します。 Like rails my(r);

+0

それは動作します!タイ!しかし、私に説明してください。以前はクラススカイボックスを作成していました。スカイボックス(タブ、テクスチャ);タブとテクスチャはポイント3のタブです。ではなぜskyboxがレールではなくこのように機能するのですか? – BlaCkOmN

+1

スカイボックスコンストラクタは1ではなく2つの引数をとるからです。コンパイラがrails(r)を見るとき、これはrails rのように変数宣言であるとみなします。 – Ilmirus

+0

ああ大丈夫、thx Ilmirus :) – BlaCkOmN