Zugriff auf Mitglieder einer Klasse nicht möglich

Ich habe ein kleines Problem, wahrscheinlich habe ich die Klassendateien falsch eingefügt, da ich nicht auf Mitglieder der gegnerischen Klasse zugreifen kann. Was mache ich falsch? mein cpp für die 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;}
};

mein Header für die Klasse:

class Enemy;

mein Haupt:

#include "classes.h"
Enemy alien;
int main()
{
    alien.//this is where intelisense tells me there are no members
}
2
Keine Datenmitglieder oder meinst du auch keine Funktionsmitglieder?
hinzugefügt der Autor Mooing Duck, Quelle

2 Antworten

Ihre Hauptdatei sieht nur, was Sie in der Kopfzeile geschrieben haben, dh Feind ist eine Klasse. Normalerweise würden Sie Ihre gesamte Klasse mit Feldern und Methodensignaturen in den Headerdateien deklarieren und Implementierungen in der CPP-Datei bereitstellen.

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
hinzugefügt
ich kann auch nicht auf setPosX() zugreifen, ich habe es mit struct, ohne effekt versucht.
hinzugefügt der Autor Bartlomiej Lewandowski, Quelle
also gehen alle Variablen normalerweise in ihren Klassen in die .h-Datei, während Funktionen in eine separate CPP-Datei gehen?
hinzugefügt der Autor Bartlomiej Lewandowski, Quelle
@coolbartek: Vlad hat die Antwort korrigiert
hinzugefügt der Autor Mooing Duck, Quelle
Mein Fehler. Anfangs dachte ich, du beziehst dich auf Felder.
hinzugefügt der Autor Vlad, Quelle
Normalerweise ja, aber es gibt auch das Problem statischer Felder (siehe Frage ) sowie Inline- und Template-Funktionen.
hinzugefügt der Autor Vlad, Quelle

Zusätzlich zu Vlads Antwort weiß deine Datei mit main nichts über die Enemy-Klasse, außer dass sie existiert.

Im Allgemeinen geht die Klasse deklarationen in die Header-Datei und die Funktion Definitionen in eine andere.

Überlegen Sie, die Dateien wie folgt aufzuteilen:

klassen.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

Beachten Sie die "include guards", die verhindern, dass dieselbe Datei mehr als einmal enthalten ist. Gute Praxis, um auf Header-Dateien zu verwenden, sonst bekommen Sie lästige Kompilierungsfehler.

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
hinzugefügt