Jump to content
Sign in to follow this  
siDDis

returnere float verdi

Recommended Posts

Eg held på å lage eit lite spel. Eg har laga eit objekt som eg skal hente posisjon på x og y akse frå.

 

I klassen Character.h så har eg deklarert det sånn.

 

class Character
{
// Methods
public:

  ~Character();

  // This must be called each frame
  void update(float deltaTime);

  void draw();

  float getPositionX();
  float getPositionY();

private:

  float m_x;
  float m_y;
}

 

Når eg kjører ein build i Anjuta så funker det fint. (Kva er build forresten? Det er ikkje det same som å kompilere vell?)

 

Men når eg legger til metodene i Character.cpp

float Character::getPositionX()
{
return m_x;	
}

float Character::getPositionY()
{
return m_y;	
}

 

Så får eg feilmelding når eg kjører ein build

Character.cpp:74: error: no ‘float Character::getPositionX()’ member function declared in class ‘Character’
Character.cpp:79: error: no ‘float Character::getPositionY()’ member function declared in class ‘Character’

Kva er det eg ikkje forstår? :)

Share this post


Link to post
Eg held på å lage eit lite spel. Eg har laga eit objekt som eg skal hente posisjon på x og y akse frå.

 

I klassen Character.h så har eg deklarert det sånn.

 

class Character
{
// Methods
public:

  ~Character();

  // This must be called each frame
  void update(float deltaTime);

  void draw();

  float getPositionX();
  float getPositionY();

private:

  float m_x;
  float m_y;
}

 

Når eg kjører ein build i Anjuta så funker det fint. (Kva er build forresten? Det er ikkje det same som å kompilere vell?)

 

Men når eg legger til metodene i Character.cpp

float Character::getPositionX()
{
return m_x;	
}

float Character::getPositionY()
{
return m_y;	
}

 

Så får eg feilmelding når eg kjører ein build

Character.cpp:74: error: no ‘float Character::getPositionX()’ member function declared in class ‘Character’
Character.cpp:79: error: no ‘float Character::getPositionY()’ member function declared in class ‘Character’

Kva er det eg ikkje forstår? :)

6706956[/snapback]

 

 

Hvorfor bruker du ikke en vektor-struct eller noe slikt?

Og holde posisjonen i to variabler er ganske teit egentlig :)

 

struct Point

{

float x;

float y;

};

 

Uansett.

Har du inkludert header-filen i cpp-filen?

og forresten, du burde ha includer-guards i h fila.

dvs.. noe sånt som

#ifndef H_xxHEADERFILNAVNxx_H

#define H_xxHEADERFILNAVNxx_H

 

//kode

#endif

 

Dette er for å unngå linker errors.

lykke til!

Share this post


Link to post

Kan jeg se hele koden? Virker som at det er noe kluss når du inkluderer headerfilen i kildefilen, ettersom at kompilatoren klager på at funksjonene du implementerer ikke er deklarert.

 

Og forøvrig så er "build" det samme som å kompilere og linke. Dvs. at man kompilerer hver enkelt fil til en objektfil, for deretter at disse linkes sammen til den kjørbare fila.

Share this post


Link to post

Nå fant eg feilen, eg lagra til feil Header fil som blei kjørt i builden :) Typisk tabbefeil.

 

Når det gjelder brukt av strukturer så er jo koordinatene allereie lagra i eit objekt, men eg trenger ikkje å returnere alle verdiane i objektet?

 

Eg poster begge dei 2 filene her.

 

// Character.h

#ifndef CHARACTER_H
#define CHARACTER_H

#include "SDL/SDL.h"
#include "SDLGraphics.h"

class Character
{
// Methods
public:
  // This class holds a pointer to the graphics object but will not destroy it.
  Character(SDLGraphics* graphics,
            int imageX, int imageY,
            int width, int height,
            int transparentR, int transparentG, int transparentB,
            const char* bitmapFileName,
            float x, float y,
            float maxSpeed);

  ~Character();

  // This must be called each frame
  void update(float deltaTime);

  void draw();

  void moveLeft();
  void moveRight();
  void moveUp();
  void moveDown();
  void stopMoving();
  float getPositionX();
  float getPositionY();

// Data
private:
  SDLGraphics* m_graphics;
  SDL_Surface* m_bitmap;

  float m_x;
  float m_y;
  float m_width;
  float m_height;

  float m_imageX;
  float m_imageY;

  float m_maxSpeed;
  float m_currentSpeedX;
  float m_currentSpeedY;
};
#endif

// Character.cpp

#include "Character.h"

Character::Character(SDLGraphics* graphics,
                    int imageX, int imageY,
                    int width, int height,
                    int transparentR, int transparentG, int transparentB,
                    const char* bitmapFileName,
                    float x, float y,
                    float maxSpeed) : m_graphics(graphics),
                                      m_imageX(imageX), m_imageY(imageY),
                                      m_width(width), m_height(height),
                                      m_x(x), m_y(y),
                                      m_maxSpeed(maxSpeed),
                                      m_currentSpeedX(0.0f)
{
  m_bitmap = m_graphics->loadBitmap(bitmapFileName,
                                    transparentR, transparentG, transparentB);
}

Character::~Character()
{
  m_graphics->closeBitmap(m_bitmap);
}

// Updates the Objects position on screen.
void Character::update(float deltaTime)
{
  m_x += m_currentSpeedX * deltaTime;
  m_y += m_currentSpeedY * deltaTime;
  
  // We dont want the objects to go outside the screen.
  if (m_x < 0.0f) m_x = 0.0f;
  if (m_x > 960.0f) m_x = 960.0f;
  if (m_y < 0.0f) m_y = 0.0f;
  if (m_y > 704.0f) m_y = 704.0f;
}

void Character::draw()
{
  m_graphics->drawSprite(m_bitmap,
                         m_imageX, m_imageY,
                         m_x, m_y,
                         m_width, m_height);
}

void Character::moveLeft()
{
  m_currentSpeedX = -m_maxSpeed;
}

void Character::moveRight()
{
  m_currentSpeedX = m_maxSpeed;
}

void Character::moveUp()
{
  m_currentSpeedY = -m_maxSpeed;
}

void Character::moveDown()
{
  m_currentSpeedY = m_maxSpeed;
}

void Character::stopMoving()
{
  m_currentSpeedX = 0.0f;
  m_currentSpeedY = 0.0f;
}

float Character::getPositionX()
{
return m_x;	
}

float Character::getPositionY()
{
return m_y;	
}

 

Bør eg verkeleg lage ein strukt i den klassen som skiller ut koordinatene? Eg er ganske fersk i OOP og trenger trening her.

 

Dette putter eg inn i Header fila ikkje sant?

struct Position
{
float x;
float y;
};

Share this post


Link to post

Alle deklarasjoner, enten det er klassedeklarasjoner, funksjonsdeklarasjoner, eller hva det måtte være av deklarasjoner, så går dette i headerfiler. Alt av definisjoner, går imidlertid i kildefiler.

 

Dessuten så er det ikke dumt å bruke .hpp istedenfor .h som filendelse i headerfiler når det er snakk om C++, på samme måte som at man bruker .cpp istedenfor .c i kildefiler.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...