لا يمكن الوصول إلى أعضاء الصف

لدي مشكلة صغيرة ، ربما قمت بتضمين ملفات الصف بشكل خاطئ ، لأنني لا أستطيع الوصول إلى أعضاء فئة العدو. ما الخطأ الذي افعله؟ بلدي 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 إجابة

سيرى الملف الرئيسي فقط ما كتبته في العنوان ، وهو أن العدو هو فصل دراسي. عادةً ما تقوم بتعريف الفصل بأكمله بالحقول وتوقيعات الأسلوب في ملفات الرأس ، وتوفير عمليات التنفيذ في ملف .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: فلاد صحح الجواب
وأضاف المؤلف Mooing Duck, مصدر
خطأي. في البداية اعتقدت أنك كنت تشير إلى الحقول.
وأضاف المؤلف Vlad, مصدر
نعم عادة ، ولكن هناك أيضًا مسألة الحقول الثابتة (راجع السؤال ) ، ووظائف المضمنة والقالب.
وأضاف المؤلف Vlad, مصدر

بالإضافة إلى إجابة فلاد ، فإن ملفك الرئيسي لا يعرف أي شيء عن فئة العدو ، بخلاف كونه موجودًا.

بشكل عام ، يتم نقل فئة الإعلانات في ملف الرأس ، وستظهر الوظيفة التعريفات في آخر.

فكر في تقسيم الملفات مثل:

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

لاحظ "تضمين guards" التي تمنع نفس الملف من تضمين أكثر من مرة. ممارسة جيدة لاستخدامها في ملفات رأس ، وإلا تحصل على أخطاء تجميع مزعج.

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
وأضاف