2010-11-21 4 views
2

이 오류를 찾아서 몇 가지 해결책을 시도했지만 아무 것도 발견하지 못했습니다.이 시점에서 컴파일하고 싶습니다.C++ linux 컴파일 오류 : 'main'에 대한 정의되지 않은 참조

내가 점점 오전 오류 :

/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start': 
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main' 

사용 :

g++ -lglut Solar.cpp 

코드가 여기에 있습니다 :

using namespace std; 
#include <stdio.h> 
#include <GL/glut.h> 
#include "math.h" 

class Solar { 

    int main(){ 
    initializeGL(); 
    //Stars Alpha = new Stars(5.0); 
    //Stars *Alpha = new Stars(5.0); 
    //Planets *Awe = new Planets(.6,2,30,"Awe",0.0,0.0,0.0); 
    paintGL(); 
    return 0; 
    } 



    vid initializeGL(){ 
     glShadeModel(GL_SMOOTH); 

     glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
     glClearDepth(1.0f); 

     glEnable(GL_DEPTH_TEST); 
     glDepthFunc(GL_LEQUAL); 

     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 

     // lighting stuff 
     GLfloat ambient[] = {0.0, 0.0, 0.0, 1.0}; 
     GLfloat diffuse[] = {0.9, 0.9, 0.9, 1.0}; 
     GLfloat specular[] = {0.4, 0.4, 0.4, 1.0}; 
     GLfloat position0[] = {1.0, 1.0, 1.0, 0.0}; 
     glLightfv(GL_LIGHT0, GL_POSITION, position0); 
     glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); 
     glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); 
     glLightfv(GL_LIGHT0, GL_SPECULAR, specular); 
     GLfloat position1[] = {-1.0, -1.0, -1.0, 0.0}; 
     glLightfv(GL_LIGHT1, GL_POSITION, position1); 
     glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); 
     glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); 
     glLightfv(GL_LIGHT1, GL_SPECULAR, specular); 

     glEnable(GL_LIGHTING); 
     glEnable(GL_LIGHT0); 
     glEnable(GL_LIGHT1); 
     glEnable(GL_COLOR_MATERIAL); 

     /* Draws the Grid*/ 
     drawRGrid(); 
    } 

    void resizeGL(int width, int height){ 
    height = height?height:1; 

    glViewport(0, 0, (GLint)width, (GLint)height); 

    // update projection matrix 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,.10f,200.0f); 

    // modeview matrix is simply identity 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    } 

    void paintGL(){ 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    //set camera position using gluLookAt 
    glLoadIdentity(); 
    gluLookAt(0.0f,0.0f,0.0f,0.0f,0.0f,-200.0f,0.0f,1.0f,0.0f); 

    } 


    void doCircle(double x, double y, double radius){ 
    glEnable(GL_BLEND); 
    double y1=y+radius; 
    double x1=x; 
    glBegin(GL_LINE_STRIP); 
    for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f){ 
     double x2=x+(radius*(float)sin((double)angle)); 
     double y2=y+(radius*(float)cos((double)angle)); 
     glColor3f(1.0,1.0,1.0); //White 
     glVertex2d(x1,y1); 
     y1=y2; 
     x1=x2; 
    } 
    glEnd(); 
    glDisable(GL_BLEND); 
    } 

    void drawRGrid(){ 
    float xCirc = 0; 
    float yCirc = 0; 
    int numCircles = 5; 
    int threesixty = 360; 
    int numLines = 20; 

    //draws my circles 
    for (int i=0; i < numCircles;i++){ 
     doCircle(1.0,1.0,i); 
    } 

    //draws my lines 
    for (int j=0; j < threesixty/numLines;j+= numLines){ 
     // multiply by numCircles to get to extend to 
     // that length 
     drawLines(sin(j)*numCircles,sin(j)*numCircles); 
    } 

    } 

    void drawLines(float xCirc, float yCirc){ 
    glBegin(GL_LINES); 
    glVertex2f(0,0); 
    glVertex2f(xCirc,yCirc); 
    glEnd(); 
    } 



}; 

어떤 도움이 큰 이해할 수있을 것이다!

+0

중복 될 main를 재 작성 할 수 있습니다 [주요의 적절한 선언은 무엇?] (http://stackoverflow.com/questions/4207134/what-is-the-proper- declaration-of-main) (질문 당했을 때 중복이 아니었지만이 질문에 대한 답변을 포함하도록 FAQ 질문이 업데이트되었습니다.) –

답변

6

구성원 기능으로 main()을 선언했습니다.

응용 프로그램을 시작할 때 호출되는 main() 함수는 전역 네임 스페이스의 비 멤버 함수 여야합니다.

good introductory C++ book이 설명합니다.

+0

내 Java가 제공됩니다. 링크도 있습니다. – Jim

+0

@ 짐 : 그렇다면 훌륭한 C++ 서적을 구해야합니다. –

3

mainSolar에 신고하셨습니다. main은 무료 기능, 즉 클래스 내에 포함되지 않아야합니다.

1

main 작성한 기능이 Solar::main (실제로는 더 재미있는 이름)이기 때문에 찾을 수 없습니다. class Solar 아래로 이동해야합니다. 그런 다음 멤버 변수를 소개 할 때까지 class Solarstruct Solar으로 변경하려고합니다. 마지막으로, 당신의

extern "C" int main (int /* argc */, char *const * /* argv */) { 
    Solar solar; 
    solar.initializeGL(); 
    //Stars Alpha = new Stars(5.0); 
    //Stars *Alpha = new Stars(5.0); 
    //Planets *Awe = new Planets(.6,2,30,"Awe",0.0,0.0,0.0); 
    solar.paintGL(); 
    return 0; 
} 
+0

멤버 변수가 없으면 OP가'struct'를 사용하는 것이 왜 좋아야합니까? –

+0

더 짧지 만 그렇지 않으면'class {public : ...};와 같습니다. – dennycrane

관련 문제