Cragmite Temat założony przez niniejszego użytkownika |
Błąd kompilacji po dodaniu nowej klasy do programu » 2016-09-08 13:47:08 Witam, Zabieram się za pisanie prostej gry w OpenGL z wykorzystaniem freeglut, jednak mam problem z zaimplementowaniem klasy odpowiedzialnej za symulację prostych zjawisk fizycznych. Główny plik Source.cpp kompilował się bezbłędnie, jednakże po dołączeniu klasy Fizyka z oddzielnych plików .cpp i .h wysypuje mi kilka błędów C2535 i C1075, których przyczyny nie mogę za nic w świecie znaleźć. Plik Source.cpp: #include <GL/freeglut.h> #include "Fizykaa.h"
int wys = 600; int szer = 800; void display(); void resize( int width, int height ); void keyboard( unsigned char key, int x, int y );
int main( int argc, char * argv[] ) { glutInit( & argc, argv ); glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowPosition( 10, 10 ); glutInitWindowSize( szer, wys ); glutCreateWindow( "Arkanoid" ); glClearColor( 1, 1, 1, 1 ); glutDisplayFunc( display ); glutReshapeFunc( resize ); glutKeyboardFunc( keyboard ); glutMainLoop(); return 0; }
void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glutSwapBuffers(); }
void resize( int width, int height ) { const float ar =( float ) width /( float ) height; glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glFrustum( - ar, ar, - 1.0, 1.0, 2.0, 100.0 ); gluLookAt( 0, 0, 5, 0, 0, 0, 0, 1, 0 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); wys = height; szer = width; cout << endl; }
void keyboard( unsigned char key, int x, int y ) { if( key == 27 ) exit( 0 ); glutPostRedisplay(); } Plik Fizykaa.cpp: #include "Fizykaa.h"
Fizyka::Fizyka() { m_g = 0.0; m_alfa_g = 0.0; m_v = 0.0; m_alfa_v = 0.0; m_granica.xa = - 1.0; m_granica.ya = - 1.0; m_granica.xb = 1.0; m_granica.yb = 1.0; Reset(); }
void Fizyka::Odbicie( float alfa_n ) { if( fabs( alfa_n - m_alfa_v ) > 90.0 ) m_alfa_v = alfa_n -( 180.0 + m_alfa_v - alfa_n ); }
void Fizyka::Aktualizuj( int czas_aktualny ) { float delta_t =( czas_aktualny - m_czas ) / 2500; double v_x, v_y; v_x = m_v * cos( m_alfa_v / 180.0 * PI ); v_y = m_v * sin( m_alfa_v / 180.0 * PI ); m_x = m_x + v_x * delta_t + 0.5 * m_g * cos( m_alfa_g / 180.0 * PI ) * delta_t * delta_t; m_y = m_y + v_y * delta_t + 0.5 * m_g * sin( m_alfa_g / 180.0 * PI ) * delta_t * delta_t; v_x = v_x + m_g * cos( m_alfa_g / 180.0 * PI ) * delta_t; v_y = v_y + m_g * sin( m_alfa_g / 180.0 * PI ) * delta_t; m_v = sqrt( v_x * v_x + v_y * v_y ); m_alfa_v = atan2( v_y, v_x ) * 180.0 / PI; m_czas += delta_t; }
int Fizyka::Kolizja( const Fizyka & X ) { int kolizja = 0; if( WProstokacie( m_x + m_granica.xa, m_y + m_granica.ya, X ) == 1 ) kolizja = 1; else if( WProstokacie( m_x + m_granica.xa, m_y + m_granica.yb, X ) == 1 ) kolizja = 1; else if( WProstokacie( m_x + m_granica.xb, m_y + m_granica.yb, X ) == 1 ) kolizja = 1; else if( WProstokacie( m_x + m_granica.xb, m_y + m_granica.ya, X ) == 1 ) kolizja = 1; else if( WProstokacie( X.m_x + X.m_granica.xa, X.m_y + X.m_granica.ya, * this ) == 1 ) kolizja = 1; else if( WProstokacie( X.m_x + X.m_granica.xa, X.m_y + X.m_granica.yb, * this ) == 1 ) kolizja = 1; else if( WProstokacie( X.m_x + X.m_granica.xb, X.m_y + X.m_granica.yb, * this ) == 1 ) kolizja = 1; else if( WProstokacie( X.m_x + X.m_granica.xb, X.m_y + X.m_granica.ya, * this ) == 1 ) kolizja = 1; if( kolizja ) { float alfa_n = ZnajdzNormalna( X ); Odbicie( alfa_n ); } return kolizja; } Plik Fizykaa.h: #ifndef FIZYKAA_H #define FIZYKAA_H
#include <cmath> #include <iostream> using namespace std;
const double PI = 3.1415926536;
typedef struct sGranica { float xa; float ya; float xb; float yb; } sGranica;
class Fizyka { protected: int m_czas; sGranica m_granica; float m_x, m_y; float m_v; float m_alfa_v; float m_g; float m_alfa_g; public: Fizyka(); ~Fizyka(); void Aktualizuj( int czas_aktualny ); void UstawPredkosc( float _v, float _m_alfa_v ); void UstawFizyke( float _g, float _m_alfa_g ); void UstawGeometrie( float _x, float _y, float _xa, float _ya, float _xb, float _yb ); virtual int Kolizja( const Fizyka & X ); void Reset(); private: void Odbicie( float alfa_n ); int WProstokacie( float _x, float _y, const Fizyka & X ); float Odleglosc( float _x, float _y, float _xa, float _ya, float _xb, float _yb ); virtual float ZnajdzNormalna( const Fizyka & X ); };
#endif Log kompilacji: 1>------ Build started: Project: Arkanoid2, Configuration: Debug Win32 ------ 1> Source.cpp 1>c:\visual studio - pliki\arkanoid2\arkanoid2\source.cpp(28): error C2535: 'void Fizyka::display(void)' : member function already defined or declared 1> c:\visual studio - pliki\arkanoid2\arkanoid2\source.cpp(6) : see declaration of 'Fizyka::display' 1>c:\visual studio - pliki\arkanoid2\arkanoid2\source.cpp(35): error C2535: 'void Fizyka::resize(int,int)' : member function already defined or declared 1> c:\visual studio - pliki\arkanoid2\arkanoid2\source.cpp(7) : see declaration of 'Fizyka::resize' 1>c:\visual studio - pliki\arkanoid2\arkanoid2\source.cpp(54): error C2535: 'void Fizyka::keyboard(unsigned char,int,int)' : member function already defined or declared 1> c:\visual studio - pliki\arkanoid2\arkanoid2\source.cpp(8) : see declaration of 'Fizyka::keyboard' 1>c:\visual studio - pliki\arkanoid2\arkanoid2\source.cpp(59): fatal error C1075: end of file found before the left brace '{' at 'c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.h(19)' was matched 1> Fizykaa.cpp 1>c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.cpp(4): error C2535: 'Fizyka::Fizyka(void)' : member function already defined or declared 1> c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.h(30) : see declaration of 'Fizyka::Fizyka' 1>c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.cpp(18): error C2535: 'void Fizyka::Odbicie(float)' : member function already defined or declared 1> c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.h(40) : see declaration of 'Fizyka::Odbicie' 1>c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.cpp(25): error C2535: 'void Fizyka::Aktualizuj(int)' : member function already defined or declared 1> c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.h(32) : see declaration of 'Fizyka::Aktualizuj' 1>c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.cpp(44): error C2535: 'int Fizyka::Kolizja(const Fizyka &)' : member function already defined or declared 1> c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.h(36) : see declaration of 'Fizyka::Kolizja' 1>c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.cpp(72): fatal error C1075: end of file found before the left brace '{' at 'c:\visual studio - pliki\arkanoid2\arkanoid2\fizykaa.h(19)' was matched 1> Generating Code... ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Mam nadzieję, że pomożecie mi znaleźć błąd, gdyż nie ukrywam, że utknąłem w martwym punkcie, a chciałbym jak najszybciej móc kontynuować pracę. Pozdrawiam! EDIT: Problem został rozwiązany, ale chciałbym się jeszcze dowiedzieć jak - po ponownym uruchomieniu programu powitał mnie komunikat: "The line endings in the following file are not consistent. Do you want to normalize the line endings?" Po wyrażeniu zgody na normalizację błędy wspomniane przeze mnie wcześniej nie występują, ale dlaczego? Nie zauważyłem zmian w kodzie. |