我在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中使用的接口的使用方式相同,还是更常用?