Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dziedziczenie implementacji funkcji z klasy podstawowej

Ostatnio zmodyfikowano 2015-01-04 14:39
Autor Wiadomość
miedziaq
Temat założony przez niniejszego użytkownika
[C++] Dziedziczenie implementacji funkcji z klasy podstawowej
» 2015-01-04 14:39:46
Witam

W klasie bazowej mam utworzone metody i właściwości, wszystkie wraz z ich implementacją chciałbym dziedziczyć do klasy pochodnej. Jednak działa to jedynie gdy implementacje metody zapisze bezposrednio wewnątrz klasy. Implementacje chciałbym zapisac w pliku {nazwaklasy.cpp} odnosząc się poprzez operator :: Nie potrafię sobie poradzic z tym problemem.

plik: object.hpp
C/C++
#ifndef OBJECT_HPP
#define OBJECT_HPP

#include<Windows.h>
#include<d3dx9.h>
#include<d3d9.h>
#include"engine.hpp"

class CObject
{
public:
   
    void MoveX() { x += movex; };
    void MoveY() { y += movey; };
    void NextFrame();
    void IncreaseAnimCount() { animcount++; };
   
    int const GetX() { return x; };
    int const GetY() { return y; };
    int const GetWidth() { return width; };
    int const GetHeight() { return height; };
    int const GetCurFrame() { return curframe; };
    int const GetLastFrame() { return lastframe; };
    int const GetAnimDelay() { return animdelay; };
    int const GetAnimCount() { return animcount; };
    int const GetScaleX() { return scalex; };
    int const GetScaleY() { return scaley; };
    int const GetRotation() { return rotation; };
    int const GetRotateRate() { return rotaterate; };
    virtual D3DXVECTOR3 GetPosition() = 0;
    LPDIRECT3DTEXTURE9 const GetObjectTexture() { return objecttexture; };
   
    void SetX( int xpos ) { x = xpos; };
    void SetY( int ypos ) { y = ypos; };
    void SetAnimDelay( int animdelayval ) { animdelay = animdelayval; };
    void SetScaleX( int scalexval ) { scalex = scalexval; };
    void SetMoveX( int movexval ) { movex = movexval; };
    void SetMoveY( int moveyval ) { movey = moveyval; };
    void SetScaleY( int scaleyval ) { scaley = scaleyval; };
    void SetRotation( int rotationval ) { rotation = rotationval; };
    void SetRotateRate( int rotaterateval ) { rotaterate = rotaterateval; };
    void SetFileName( LPCTSTR filenameval ) { filename = filenameval; };
    void SetObjectTexture( int r, int g, int b );
   
protected:
    int x, y;
    int width, height;
    int movex, movey;
    int curframe, lastframe;
    int animdelay, animcount;
    int scalex, scaley;
    int rotation, rotaterate;
    LPCTSTR filename;
    LPDIRECT3DTEXTURE9 objecttexture;
};

#endif


Plik object.cpp
C/C++
#include "object.hpp"
#include <d3d9.h>
#include <d3dx9.h>
#include "engine.hpp"

void CObject::SetObjectTexture( int r, int g, int b )
{
    objecttexture = LoadTexture( filename, D3DCOLOR_XRGB( r, g, b ) );
}

plik noose.hpp  klasa dziedziczaca

C/C++
#ifndef NOOSE_HPP
#define NOOSE_HPP
#include "object.hpp"

class CNoose
    : public CObject
{
public:
    CNoose();
    CNoose( LPCTSTR spritename, int xpos, int ypos, int heightval, int widthval, int movexval, int moveyval );
    CNoose( LPCTSTR spritename, int xpos, int ypos, int heightval, int widthval, int movexval, int moveyval, int scalexval, int scaleyval );
    CNoose( LPCTSTR spritename, int xpos, int ypos, int heightval, int widthval, int movexval, int moveyval, int scalexval, int scaleyval, int rotationval, int rotaterateval );
    ~CNoose() { if( objecttexture != NULL ) objecttexture->Release(); };
   
    void NextFrame();
    D3DXVECTOR3 GetPosition();
   
};

#endif

plik noose.cpp
C/C++
#include "object.hpp"
#include "noose.hpp"

CNoose::CNoose( LPCTSTR spritename, int xpos, int ypos, int heightval, int widthval, int movexval, int moveyval )
{
    filename = spritename;
    x = xpos;
    y = ypos;
    movex = movexval;
    movey = moveyval;
    height = heightval;
    width = widthval;
    lastframe = 11;
   
   
}

CNoose::CNoose( LPCTSTR spritename, int xpos, int ypos, int heightval, int widthval, int movexval, int moveyval, int scalexval, int scaleyval )
{
    filename = spritename;
    x = xpos;
    y = ypos;
    movex = movexval;
    movey = moveyval;
    scalex = scalexval;
    scaley = scaleyval;
}

CNoose::CNoose( LPCTSTR spritename, int xpos, int ypos, int heightval, int widthval, int movexval, int moveyval, int scalexval, int scaleyval, int rotationval, int rotaterateval )
{
    filename = spritename;
    x = xpos;
    y = ypos;
    movex = movexval;
    movey = moveyval;
    scalex = scalexval;
    scaley = scaleyval;
    rotation = rotationval;
    rotaterate = rotaterateval;
}




void CNoose::NextFrame()
{
    if( curframe <= lastframe )
         curframe++;
    else
    {
        curframe = 1;
    }
}





D3DXVECTOR3 CNoose::GetPosition()
{
    D3DXVECTOR3 position(( float ) x,( float ) y, 0 );
    return position;
}

Funkcje implementowane w klasie bazowej działają dopóki nie muszą zmieniać którejś z wlasciwosci i nie sa zaimplementowane wewnatrz klasy w pliku object.hpp

w Main wywolywane sa
C/C++
CNoose rope2( "rope.png", 500, 500, 116, 256, 6, 6 );
rope2.SetObjectTexture( 255, 0, 254 );
rope2.GetObjectTexture(),

Error 2 error LNK2019: unresolved external symbol "public: void __thiscall CObject::SetObjectTexture(int,int,int)" (?SetObjectTexture@CObject@@QAEXHHH@Z) referenced in function "int __cdecl Game_Init(struct HWND__ *)" (?Game_Init@@YAHPAUHWND__@@@Z) D:\Documents and Settings\Dominik\Moje dokumenty\Visual Studio 2010\Projects\Hangman_2D\game.obj

Czy ktos moglby mi pomoc z tym problemem?


[EDIT] Problem rozwiązany, visual nie rozpoznawał plików .hpp utworzonych ręcznie poza środowiskiem [/EDIT]
P-124073
« 1 »
  Strona 1 z 1