gcc/c++;-未定义的引用/类错误 我被迫学习C++和OpenGL开发,并遵循MFC的几个教程,我尝试用GCC转换成Linux。

gcc/c++;-未定义的引用/类错误 我被迫学习C++和OpenGL开发,并遵循MFC的几个教程,我尝试用GCC转换成Linux。,c++,gcc,C++,Gcc,它们大多数都成功了,但这一个在编译时给了我这个错误 /tmp/ccUmEDkj.o: In function `display()': 14new.cc:(.text+0x1ee): undefined reference to `Titik2D::shearing(Titik2D, int)' collect2: error: ld returned 1 exit status 这就是我编译它的方式 gcc 14new.cc -lGL -lglut -lGLU -o 14 14new.cc

它们大多数都成功了,但这一个在编译时给了我这个错误

/tmp/ccUmEDkj.o: In function `display()':
14new.cc:(.text+0x1ee): undefined reference to `Titik2D::shearing(Titik2D, int)'
collect2: error: ld returned 1 exit status
这就是我编译它的方式

gcc 14new.cc -lGL -lglut -lGLU -o 14
14new.cc

#include <stdio.h>
#include <GL/freeglut.h>

GLsizei wh = 600 ; // initial height of window
GLsizei ww = 800 ; // initial width of window

class Titik2D {
    public: int x,y;
    Titik2D shearing(Titik2D p, int h);
};

Titik2D shearing(Titik2D p, int h)
{
    Titik2D temp;
    temp.x=p.x + h*p.y;
    temp.y=p.y;
    return temp;
}

void display(void)
{
    glClear ( GL_COLOR_BUFFER_BIT ); //clear pixel buffer

    Titik2D hit;

    int i;
    Titik2D p[11], q[11];
    p[0].x=10; p[0].y=10;
    p[1].x=50; p[1].y=10;
    p[2].x=50; p[2].y=100;
    p[3].x=100; p[3].y=100;
    p[4].x=100; p[4].y=150;
    p[5].x=50; p[5].y=150;
    p[6].x=50; p[6].y=250;
    p[7].x=150; p[7].y=250;
    p[8].x=150; p[8].y=300;
    p[9].x=10; p[9].y=300;
    p[10].x=10; p[10].y=10;

    glColor3f(1,0,0);
    glBegin(GL_LINE_STRIP);
        for (i=0; i<= 10; i++)
            glVertex2i(p[i].x, p[i].y);
    glEnd();

    for (i=0; i<= 10; i++){
        q[i]= hit.shearing(p[i],2);
    }

    glBegin(GL_LINE_STRIP);
    for (i=0; i <=10; i++)
    glVertex2i(q[i].x, q[i].y);
    glEnd();
    glFlush();
}

void MyInit ( void ) {
    glClearColor ( 1.0, 1.0, 1.0, 0.0 ); //white background
    glColor3f(1, 0, 0); // red drawing colour
    glMatrixMode ( GL_PROJECTION );
    glLoadIdentity ();
    gluOrtho2D ( 0.0, (GLdouble)ww, 0.0, (GLdouble)wh ); //Display area
}



int main(int argc, char **argv)
{
    printf("hello world\n");
    glutInit(&argc, argv);
    glutInitDisplayMode
    ( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH );

    glutInitWindowSize(ww,wh);
    glutInitWindowPosition(180,90); //position on screen
    glutCreateWindow("opengl window");


    MyInit();
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}
#包括
#包括
GLsizei wh=600;//窗的初始高度
GLsizei ww=800;//窗口初始宽度
Titik2D类{
公众:int x,y ;;
Titik2D剪切(Titik2D p,int h);
};
Titik2D剪切(Titik2D p,int h)
{
温度;
温度x=p.x+h*p.y;
温度y=p.y;
返回温度;
}
作废显示(作废)
{
glClear(GL_颜色_缓冲区_位);//清除像素缓冲区
提提打;
int i;
titik2dp[11],q[11];
p[0].x=10;p[0].y=10;
p[1].x=50;p[1].y=10;
p[2].x=50;p[2].y=100;
p[3].x=100;p[3].y=100;
p[4].x=100;p[4].y=150;
p[5].x=50;p[5].y=150;
p[6].x=50;p[6].y=250;
p[7].x=150;p[7].y=250;
p[8].x=150;p[8].y=300;
p[9].x=10;p[9].y=300;
p[10].x=10;p[10].y=10;
gl3f(1,0,0);
glBegin(GL_线_带);

对于(i=0;i问题在于:
Titik2D剪切(titik2dp,inth){}

您定义了自由函数,而不是成员函数

解决方案:


Titik2D Titik2D::剪切(Titik2D p,int h){}

您忘记了剪切定义中的范围
Titik2D::
。 您没有定义成员函数

Titik2D Titik2D::shearing(Titik2D p, int h)
您正在声明和定义一个自由函数

Titik2D shearing(Titik2D p, int h)

因此,你会得到链接错误。

< P>和GCC是C语言。在C++中使用G++(和CSTDIO)。在定义函数时,不知道类名。