c Allegro ISO error Использование & amp; и целые числа еще не работают

Я делаю игру allegro, используя свою собственную логику и примитивный движок. Я пытаюсь сделать гравитацию и контактировать с плитками из массива. Чтобы иметь возможность изменять значения класса из другого класса, я должен был использовать символ ссылки ‘&». После компиляции я получаю эту ошибку
ISO C ++ запрещает сравнение между указателем и целым числом в строке 29 gravity.cpp
Вот заголовки для гравитации класса и gravity.cpp плюс player.h и player.cpp.

gravity.h

#ifndef GRAVITY_H
#define GRAVITY_H
#include<allegro.h>
#include<fstream>
#include "Global.h"
class Gravity
{
public:
Gravity();
~Gravity();
bool canJump,JumpAgain,OnSolidTile,Collision;
int GravSpeed;
void LoadMap(const char*filename);
void Init();
void Grav_Collision(int &x,int &y,int &x2,int &y2,int Gravspeed,bool canJump,bool JumpAgain,bool OnSolidTile,bool Collision);
private:
int loadCounterX,loadCounterY;
int ColMap[100][100];
int MapSizeX,MapSizeY;
};

#endif // GRAVITY_H

gravity.cpp
Ошибка в этом файле
#include «gravity.h» // заголовочный файл класса

Gravity::Gravity()
{

}Gravity::~Gravity()
{

}
void Gravity::Init()
{
loadCounterX = loadCounterY = 0;
};
void Gravity::Grav_Collision(int &x,int &y,int &x2,int &y2,int Gravspeed,bool canJump,bool JumpAgain,bool OnSolidTile,bool Collision)
{
for(int i = 0;i < MapSizeX;i++)
{
for(int j = 0;j < MapSizeY;j++)
{
if(ColMap[i][j] = 1)
{
//Collision
if(&y2 < j*BlockSize)--**This IS where the error is found **--
{
Collision = true;
}
else
{
Collision = false;
}
}
}
}
};
void Gravity::LoadMap(const char*filename)
{
std::ifstream openfile (filename);
if (openfile.is_open())
{
openfile >> MapSizeX >> MapSizeY;
while (!openfile.eof())
{
openfile >> ColMap[loadCounterX][loadCounterY];
loadCounterX ++;
if (loadCounterX >= MapSizeX)
{
loadCounterX = 0;
loadCounterY ++;
}
}
loadCounterX = loadCounterY = 0;
}
else
{
allegro_message ("NO Collision FILE");
}
};

player.h

#ifndef PLAYER_H
#define PLAYER_H
#include <allegro.h>
#include "Global.h"
class player
{
public:
player();
~player();
void Init();
void Update();
void Draw(BITMAP*buffer,int c1,int c2,int c3);
void Input();
//Variable
int x;
int x2;
int y;
int y2;
int speed;
char dir;
BITMAP*buffer;
private:
int c1;
int c2;
int c3;
};

#endif // PLAYER_H

player.cpp

#include "player.h" // class's header file

// class constructor
player::player()
{
// insert your code here
}

// class destructor
player::~player()
{
// insert your code here
}
void player::Init()
{
x = 9;
y = 9;
speed = 1;
dir = 0;
};
void player::Draw(BITMAP*buffer,int c1,int c2,int c3)
{
textprintf(buffer, font, x-30, y-10, makecol(255,0,0), "x: %03i", x);
textprintf(buffer, font, x-30, y-20, makecol(255,0,0), "y: %03i", y);
rectfill(buffer,x,y,x + 5,y + 5,makecol(c1,c2,c3));
};
void player::Input()
{
//Input
if(KLeft && x >= 0)
{
dir = 'l';
}
else if(KRIGHT && x <= SW)
{
dir = 'r';
}
else if(KUP && y >= 0)
{
dir = 'u';
}
else if(KDOWN && y <= SH)
{
dir = 'd';
}
else
{
dir = 'e';
}
//Output

if(dir == 'l')
{
x += -speed;
}
if(dir == 'r')
{
x  += speed;
}
if(dir == 'u')
{
y += -speed;
}
if(dir == 'd')
{
y  += speed;
}

};
void player::Update()
{
player::Input();

};

0

Решение

В строке ошибки вы, вероятно, имеете в виду y2 < j*BlockSize вместо &y2 < j*BlockSize, Вы сравниваете целое число с адресом переменной y (то есть указателя). И это именно то, на что жалуется компилятор.

1

Другие решения

Сообщение об ошибке ясно говорит вам, что не так.

В этой строке:

if(&y2 < j*BlockSize)

поскольку y2 целое число &y2 дает указатель и j*BlockSize является целым числом Следовательно, компилятор говорит вам, что сравнивать целое число и указатель не имеет смысла. Просто бросьте &:

if(y2 < j*BlockSize)
1

Компилятор расскажет вам все, что вам нужно знать, в этой строке &y2 получить адрес y2 и вы сравниваете это с j*BlockSize То есть интеграл и компилятор говорят, почему вы хотите сравнить адрес с числом?

Честно говоря, я не читаю ваш код и не знаю, что вы там делаете, поэтому, если вы хотите сравнить значение y2 с j*BlockSize просто сделай это как y2 < j*BlockSize, в C ++ ссылки не требуют доступа, и вы можете читать / записывать их значение как обычное значение

1
По вопросам рекламы [email protected]