Gå til innhold

returnere float verdi


Anbefalte innlegg

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? :)

Lenke til kommentar
Videoannonse
Annonse
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!

Lenke til kommentar

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.

Lenke til kommentar

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;
};

Lenke til kommentar

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.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...