クラスのメンバーにアクセスできない

私はちょっとした問題があります。おそらくクラスファイルを間違って含んでいました。なぜなら、私は敵クラスのメンバーにアクセスできないからです。何が間違っているのですか? クラスの私のcpp

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

クラスの私のヘッダー:

class Enemy;

私のメイン:

#include "classes.h"
Enemy alien;
int main()
{
    alien.//this is where intelisense tells me there are no members
}
2
データメンバーがいないか、機能メンバーがいないことを意味していますか?
追加された 著者 Mooing Duck,

2 答え

あなたのメインファイルにはあなたがヘッダに書いたものだけが表示されます。これは Enemy がクラスであることです。通常、ヘッダーファイル内のフィールドとメソッドのシグネチャでクラス全体を宣言し、.cppファイルに実装を提供します。

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
追加された
私はアクセスsetPosX()もあまりにも、私は構造体、効果なしでそれを試してみました。
追加された 著者 Bartlomiej Lewandowski,
すべての変数は通常クラス内の.hファイルに移動し、関数は別々のcppファイルに移動します。
追加された 著者 Bartlomiej Lewandowski,
@coolbartek:Vladが答えを修正しました
追加された 著者 Mooing Duck,
私の悪い。当初、私はあなたがフィールドを参照していると思っていました。
追加された 著者 Vlad,
通常は静的フィールド(質問を参照)とインライン関数とテンプレート関数の問題もあります。
追加された 著者 Vlad,

Vladの答えに加えて、mainを持つファイルは存在する以外、Enemyクラスについて何も知らない。

一般に、クラス宣言はヘッダーファイルにあり、関数定義は別のものに入ります。

ファイルを次のように分割することを検討してください。

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

同じファイルが複数回含まれないようにする「ガードを含める」ことに注意してください。ヘッダーファイルで使用することをお勧めします。そうしないと、コンパイルエラーが発生します。

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
追加された