سؤال

أحاول تعيين متغير مؤشر ثابت في فصل ما ، لكنني أتلقى هذه الأخطاء لكل متغير أحاول ضبطه.

خطأ C4430: محدد النوع المفقود - INT المفترض. ملاحظة: لا يدعم C ++ الافتراضي إلى

خطأ C2040: "XSCROLL": "int" يختلف في مستويات عدم التوجيه من "Float *"

خطأ C2440: "التهيئة": لا يمكن تحويل من "تعويم **" إلى "int"

هنا هو الكود العدو.

#include <windows.h>
#include "Player.h"

class Enemy
{
public:
Enemy(float xPos, float yPos);
Enemy(void);
~Enemy(void);

//update the position of the user controlled object.
void updatePosition(float timeFactor);

//loads all the enemy textures
void static loadTextures();

//creates a set number of enemies
void static createEnemies(int numEnemies, Enemy * enemyArray);

GLuint static enemyTex;
static float * xscroll;
static float * yscroll;
static Player * player;

private:
bool checkCollison(float x, float y, int radius);

float XPos;
float YPos;

};

محاولة ضبط المتغيرات

Enemy::xscroll = &xscroll;
Enemy::yscroll = &yscroll;
Enemy::player = &player;
هل كانت مفيدة؟

المحلول

أعتقد أنك تمزج التهيئة مع المهمة. يجب تحديد جميع المتغيرات الثابتة للفئة مرة واحدة ، من النطاق العالمي (أي التعريف خارج أي فئة أو وظيفة ، يمكن أن يكون في مساحة الاسم) ويمكن تهيئته في ذلك الوقت. يبدو هذا التعريف تمامًا مثل تعريف أي متغير عالمي ، type identifier = initializer; إلا أن المعرف يتضمن مشغل النطاق ::.

نصائح أخرى

على افتراض أن هذه هي التعاريف ، تحتاج إلى تضمين النوع (هذا هو الخطأ الأول):

float *Enemy::xscroll = ...;
Player *Enemy::player = ...;

بالنسبة للأخطاء الثانية ، يبدو ذلك xscroll ليس float, ، لذا &xscroll ليس float * وبالتالي لا يمكن تعيينه Enemy::xscroll. تحتاج إلى التأكد من صحة أنواع المتغيرات الخاصة بك.

ربما تكون كتابة الأساليب الثابتة العامة لتغيير المتغيرات هي أفضل طريقة؟ ونقل Xscroll وغيرها من STO الخاص.

أعتقد أنه حل أكثر إثارة ، وسيكون الكود أكثر بساطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top