编译时错误:未定义引用' CTetrisGame :: Create()'

时间:2014-12-10 19:16:28

标签: c++ linux opengl compiler-errors

我在c ++编程时相当新,而且我遇到了一些代码,这些代码会给我带来错误,因为代码是用于Windows操作系统的,但是我运行的是linux操作系统。有一个名为TetrisBlock.h的文件,如下所示:

#ifndef TETRIS_BLOCK_INCLUDED
#define TETRIS_BLOCK_INCLUDED

#include "Common.h"

class CTetrisBlock
{
  public:
      void Create();
      void Draw();
      void Destroy();

      CTetrisBlock();
      virtual ~CTetrisBlock();

      int GetPosX();
      int GetPosY();

      void SetPosX(int x);
      void SetPosY(int y);

  private:
      int m_iPosX, m_iPosY;
};

#endif

根据我对java的经验,这看起来像是一个接口,等待.cpp实现它并填写抽象方法。相应的TetrisBlock.cpp文件如下:

#include "TetrisBlock.h"

CTetrisBlock::CTetrisBlock()
{
    int num_blocks_x = WINDOW_WIDTH / (BLOCK_SIZE + BLOCK_SPACING);
    int num_blocks_y = WINDOW_HEIGHT / (BLOCK_SIZE + BLOCK_SPACING);

    m_iPosX = num_blocks_x / 2;
    m_iPosY = num_blocks_y - 1;
}

CTetrisBlock::~CTetrisBlock()
{
    Destroy();  
}

void CTetrisBlock::Create()
{

}

void CTetrisBlock::Draw()
{
    tRect quad;
    quad.m_iLeft = m_iPosX * (BLOCK_SIZE + BLOCK_SPACING) + BLOCK_SPACING;
    quad.m_iRight = quad.m_iLeft + BLOCK_SIZE - BLOCK_SPACING;
    quad.m_iTop = m_iPosY * (BLOCK_SIZE + BLOCK_SPACING) - BLOCK_SPACING;
    quad.m_iBottom = quad.m_iTop - BLOCK_SIZE + BLOCK_SPACING;

    glColor3d(1,1,1);
    glBegin(GL_QUADS);
    glVertex3f(quad.m_iLeft, quad.m_iBottom, 0);
    glVertex3f(quad.m_iRight, quad.m_iBottom, 0);
    glVertex3f(quad.m_iRight, quad.m_iTop, 0);
    glVertex3f(quad.m_iLeft, quad.m_iTop, 0);
    glEnd();
}


void CTetrisBlock::Destroy()
{

}

void CTetrisBlock::SetPosX(int x)
{
    m_iPosX = x;
}

void CTetrisBlock::SetPosY(int y)
{
    m_iPosY = y;
}

int CTetrisBlock::GetPosX()
{
    return m_iPosX;
}

int CTetrisBlock::GetPosY()
{
    return m_iPosY;
}

注意:OpenGL库已经在common.h文件中导入

当我编译文件TetrisBlock.cpp时,我在控制台中得到错误行:

未定义参考' CTetrisBlock :: Create()'

未定义参考' CTetrisBlock :: Draw()'

未定义引用' CTetrisBlock :: Destroy()'

等...

我猜测我填写抽象方法的方式只适用于Windows,并且在linux中有不同的方法。如果这是真的,那么我将如何在linux上填写这些抽象方法。如果我完全错了,那么任何人都可以解释为什么我会收到这些错误。另外,.h文件的使用方式与java中使用的接口的使用方式相同,还是更常用?

0 个答案:

没有答案