Ошибка компиляции Linux c ++: неопределенная ссылка на `main ' - PullRequest
2 голосов
/ 21 ноября 2010

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

Я получаю ошибку:

/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();
  }



};

Любая помощь будет с благодарностью!

Ответы [ 3 ]

6 голосов
/ 21 ноября 2010

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

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

A хорошая вводная книга по C ++ объяснит это.

3 голосов
/ 21 ноября 2010

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

1 голос
/ 21 ноября 2010

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...