Geen toegang tot leden van een klas

Ik heb een klein probleempje, ik heb waarschijnlijk de klassenbestanden verkeerd opgenomen, omdat ik geen leden van de vijandklasse kan bereiken. Wat doe ik verkeerd? mijn cpp voor klasse

#include "classes.h"

class Enemy
{
 bool alive;
 double posX,posY;
 int enemyNum;
 int animframe;
public:
Enemy(int col,int row)
{
    animframe = rand() % 2;
    posX = col*50;
    posY = row*50;
}

Enemy()
{

}
void destroy()
{
    alive = 0;
}
void setposX(double x)
{x = posX;}
void setposY(double y)
{y = posY;}
};

mijn header voor de les:

class Enemy;

mijn belangrijkste:

#include "classes.h"
Enemy alien;
int main()
{
    alien.//this is where intelisense tells me there are no members
}
2
Geen data-leden of bedoel je ook geen functionleden?
toegevoegd de auteur Mooing Duck, de bron

2 antwoord

Je hoofdbestand zal alleen zien wat je in de kop hebt geschreven, namelijk dat Vijand een klasse is. Normaal gesproken zou u uw hele klasse declareren met velden en methodehandtekeningen in de headerbestanden en implementaties in het .cpp-bestand aanbieden.

classes.h:

#ifndef _CLASSES_H_
#define _CLASSES_H_
class Enemy
{
    bool alive;
    double posX,posY;
    int enemyNum;
    int animframe;
public:
    Enemy(int col,int row);
    Enemy();
    void destroy();
    void setposX(double x);
    void setposY(double y);
};
#endif

classes.cpp:

#include "classes.h"
//....
void Enemy::destroy(){
    //....
}
//....
6
toegevoegd
ik kan ook geen toegang tot setPosX (), ik probeerde het met struct, geen effect.
toegevoegd de auteur Bartlomiej Lewandowski, de bron
dus alle variabelen gaan normaal naar .h-bestand in hun klassen, terwijl de functies naar een afzonderlijk cpp-bestand gaan?
toegevoegd de auteur Bartlomiej Lewandowski, de bron
@coolbartek: Vlad corrigeerde het antwoord
toegevoegd de auteur Mooing Duck, de bron
Mijn fout. Aanvankelijk dacht ik dat je naar velden verwees.
toegevoegd de auteur Vlad, de bron
Normaal gesproken, maar er is ook het probleem van statische velden (zie vraag ), en inline- en sjabloonfuncties.
toegevoegd de auteur Vlad, de bron

In aanvulling op het antwoord van Vlad, weet je bestand met main niets van de vijandklasse, behalve dat het bestaat.

Over het algemeen gaan de class verklaringen in het headerbestand en de functie definities in een andere.

Overweeg de bestanden op te delen zoals:

classes.h:

#ifndef CLASSES_H
#define CLASSES_H

class Enemy
{
private:
    bool alive;
    double posX,posY;
    int enemyNum;
    int animframe;
public:
    Enemy(int col,int row);
    Enemy();
    void destroy();
    void setposX(double x);
    void setposY(double y);
};

#endif//CLASSES_H

Let op de "include guards" die voorkomen dat hetzelfde bestand meerdere keren wordt opgenomen. Goede praktijk om te gebruiken op header-bestanden, anders krijg je vervelende compilatiefouten.

classes.cpp:

#include "classes.h"

Enemy::Enemy(int col,int row)
{
    animframe = rand() % 2;
    posX = col*50;
    posY = row*50;
}

Enemy::Enemy()
{

}

void Enemy::destroy()
{
    alive = 0;
}

void Enemy::setposX(double x) {x = posX;}
void Enemy::setposY(double y) {y = posY;}
3
toegevoegd