开发者

Overloading difficulty with an extended sprite class. How is this wrong?

So I've been working on a puzzle game using a sprite system I used fine previously and in my past projects have been fine when extending the class, however my code keeps throwing an error of

error C2511: 'Door:: Door(float,float,float,float,float,float,int,CGame *)' : overloaded member function not found in 'Door'

and I have no idea why as i've checked all the classes in my previous project and how they interface with the rest of the program and it's IDENTICAL but this new class is still erroring out. and the code in my main to create the object throws "no overloaded function in Door takes 8 arguments" out.

Door Class:

Door.h

#pragma once
#include "sprite.h"

class CGame;

class Door :
    public CSprite
{
public:
    Door(void);
    Door(float, float, float, float,float, float, float, int, CGame * p_Game);
    void Update(float dt);
    ~Door(void);

private:

};

Door.CPP

#include "stdafx.h"
#include "Door.h"
#include "Game.h"

Door::Door(void)
{

}
        //So this is where i try to make door class extend sprite. but it keeps saying "overloaded member function not found in Door" 
        //and the other error is "doesnt take 8 args" and to top it off. It says unexpected end of file. 
        //Uncomment this block and the code in the door bit of the map gen to see what it is doing wrong

Door::Door(float _x, float _y, float _w, float _h, float _vX开发者_C百科, float _vY, int _texID, CGame * p_Game) : CSprite(_x, _y, _w, _h, _vX, _vY, _texID, p_Game)
{
 m_iType = 4                //sets the type of sprite that this object is.
}

void Door::Update(float dt)
{
}
Door::~Door(void)
{
}

and this is the sprite class i am extending (just the relevant parts)

Sprite.h

#pragma once

class CGame;


class CSprite  
{
public:
    float m_fX; //the position of the centre of the sprite
    float m_fY;
    float m_fW; //width of the sprite in arbitrary units
    float m_fH; //height of the sprite in arbitrary units
    float m_fvX;
    float m_fvY;
    int m_iTextureID; //which of the preloaded textures to use

    float m_fR; //red component between 0 and 1
    float m_fG; //green component between 0 and 1
    float m_fB; //blue component between 0 and 1
    float m_fA; //alpha value 0-1
    int m_iType;
    CGame * m_pGame;

public:
    CSprite();
    CSprite(float x, float y, float w, float h,float vX,float vY, int textureID ,CGame * p_Game);
    bool bIsCollidingWith( CSprite * othersprite_);
    bool markedForDelete;
//This new constructor is added to the Csprite.h header file.
    float getX() { return m_fX; }
    float getY() { return m_fY; }
    virtual bool TagForDeletion();
    virtual int GetSpriteType();
    virtual ~CSprite();
    virtual void Render();
    virtual void Update(float dt);

}; 

Sprite.cpp

#include "StdAfx.h"
#include <gl.h>
#include <glut.h>
#include <glaux.h>
#include "main.h"
#include "sprite.h"
#include "Game.h"
CSprite::CSprite( )
{
    m_fX=0.0f;
    m_fY=0.0f;
    m_fW=1.0f;
    m_fH=1.0f;
    m_fvX=0.0f;
    m_fvY=0.0f;
    markedForDelete=false;
    m_fR=m_fG=m_fB=m_fA=1.0;
    m_iTextureID=0;

}

CSprite::CSprite(float x_, float y_, float w_, float h_,float vX_,float vY_, int textureID_, CGame * p_Game)
{
    m_iType = 1;
    m_fX=x_;
    m_fY=y_;
    m_fW=w_;
    m_fH=h_;
    m_fvX=vX_;
    m_fvY=vY_;
    m_fR=m_fG=m_fB=m_fA=1.0;
    m_iTextureID=textureID_;
    m_pGame = p_Game;
    markedForDelete=false;
}

CSprite::~CSprite(void)
{
}

Implementation in the game class uses the parameters extended from Sprite to create the object

p_Door[m_iSpritesLoaded++]=new Door(uiRow,4.58 -uiCol,1,1,0,0,4,this);


You miscounted your floats.

Declaration

Door(float, float, float, float,float, float, float, int, CGame * p_Game);
//     1      2      3      4     5      6      7

Definition

Door::Door(float _x, float _y, float _w, float _h, float _vX, float _vY, int _texID, CGame * p_Game)
//           1         2         3         4         5          6 
   : CSprite(_x, _y, _w, _h, _vX, _vY, _texID, p_Game)

Usage

p_Door[m_iSpritesLoaded++]=new Door(uiRow,4.58 -uiCol,1,1,0,0,4,this);
//                                    1     2         3 4 5 6

(Did you really need Stack Overflow for this?!)


Looks like your Door constructor has one extra float parameter. The declaration has 7 floats whereas the definition in Door.cpp has 6.


In Door.h the constructor has 9 arguments Door(float, float, float, float,float, float, float, int, CGame * p_Game); while in the Door.cpp the definition of the constructor has only 8 elements, that is one float is missing.

Solution: add one argument to the definition of the constructor

CSprite::CSprite(float x_, float y_, float w_, float h_,float vX_,float vY_, int textureID_, CGame * p_Game)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜