2010-11-21 10 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-宣言 - 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

メンバーは、なぜメンバ変数がない場合、 'struct'を使うのが好きですか? –

+0

これはもっと短いですが、 'class {public:...};と同等です – dennycrane

関連する問題