2016-03-23 7 views
0

У меня есть вопрос о проекте C++ с OpenGL: В моем файле «cube.cpp» У меня есть это: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 является объектом, представляющий собой вершину. 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]; 
     ^

Я попросил моих друзей, но мы не видим, почему он не хочет компилировать рельсы (г), ранее я имел создайте класс Skybox, и этот класс с тем же типом в аргументе работает правильно.

Если кто-то есть идея ...

Edit: 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, чтобы вызвать конструктор. Как rails my(r);

+0

Это работает! Ты! Но вы можете объяснить мне, пожалуйста? Потому что ранее я создаю класс skybox, и я называю это так: skybox (вкладка, текстуры); вкладка и текстуры - вкладка point3, и она работает. Так почему Skybox работает так, а не рельсы? – BlaCkOmN

+1

Это потому, что конструктор skybox принимает 2 аргумента, а не 1. Когда компилятор видит рельсы (r), он предполагает, что это объявление переменной, например rails r; – Ilmirus

+0

О, ладно, thx Ilmirus :) – BlaCkOmN

Смежные вопросы