2010-11-21 3 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

Дубликат [Что такое правильное декларирование главный?] (Http://stackoverflow.com/questions/4207134/what-is-the-proper- (он не был дублированным в то время, когда он был задан, но вопрос FAQ был обновлен, чтобы ответить на этот вопрос.) –

ответ

6

Вы объявили main() в качестве функции-члена.

Функция main(), вызываемая при запуске приложения, должна быть функцией, не являющейся членом, в глобальном пространстве имен.

A good introductory C++ book объяснил бы это.

+0

мой java проходит, хорошо, большое спасибо за ссылка. – Jim

+0

@ Jim: Вот почему вы должны получить хорошую вводную книгу на C++. –

3

Вы объявили main в классе Solar. main предполагается свободной функцией, то есть не содержащейся в классе.

1

main не может быть найден потому, что функция, которую вы написали, называется Solar::main (по правде говоря, она имеет гораздо более смешное имя). Вам нужно переместить его ниже class Solar. Тогда вы, вероятно, захотите изменить class Solar на struct Solar, пока вы не представите переменные-члены. В конце концов, вы можете переписать main быть

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

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