Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » Variable 'arrow' is being used without being initialized! But it is...

This thread is locked; no one can reply to it. rss feed Print
Variable 'arrow' is being used without being initialized! But it is...
DJLad16
Member #14,857
January 2013

I've got one those annoying errors when your display pops up and gives an error and no other information.
I usually can sort these "is being used without being initialized" but I can't the problem this time. I just don't where the problem is. I've initialized everything for my arrow.
(I know that the collision for my platforms is not the best way to achieve it, but I don't know of any other ways to do so).

#SelectExpand
1//Prototpyes 2void initPlayer(Player &player); 3 4void initCoin(Coin &coin1); 5void drawCoin(Coin &coin1, ALLEGRO_BITMAP *image); 6bool coinCollide(Coin &coin1,Player &player ,int cX, int cY, int cWidth, int cHeight, int pWidth, int pHeight, bool live, int coinCount); 7 8void initCoin2(Coin &coin2); 9void drawCoin2(Coin &coin2, ALLEGRO_BITMAP *image); 10bool coinCollide2(Coin &coin2,Player &player ,int cX, int cY, int cWidth, int cHeight, int pWidth, int pHeight, bool live, int coinCount); 11 12void initArrow(Arrow arrow); 13void drawArrow(Arrow arrow, ALLEGRO_BITMAP *image, ALLEGRO_BITMAP *image2); 14void fireArrow(Arrow arrow, Player &player, ALLEGRO_SAMPLE *bowShot); 15void updateArrow(Arrow arrow); 16 17bool collision(Player &player, int ex, int ey, int eWidth, int eHeight, int pWidth, int pHeight); 18 19void cameraUpdate(float *cameraPosition,Player &player, float width, float height); 20 21//Global Variables 22enum direction {LEFT, RIGHT}; 23int dir = LEFT; 24//int arrowCount = 10; 25//const int NUM_ARROW = 10; 26const int NUM_ENEMY = 10; 27int groundHeight = 545; 28static bool fired = false; 29bool coinLive = false; 30float cameraX, cameraY = 0; 31 32int main() 33{ 34 ALLEGRO_DISPLAY *display; 35 36 if(!al_init()) 37 { 38 al_show_native_message_box(0, 0, "Error", "Falied to initialize allegro", 0, 0); 39 return -1; 40 } 41 42 display = al_create_display(ScreenWidth, ScreenHeight); 43 44 if(!display) 45 { 46 al_show_native_message_box(0, 0, "Error", "Falied to initialize the display", 0, 0); 47 return -1; 48 } 49 50 Player player; 51 Coin coin1; 52 Coin coin2; 53 Arrow arrow; 54 bool done = false, active = false, draw = true; 55 bool jump = false; 56 int sourceX = 32, sourceY = 0; 57 int coinCount = 0; 58 const float FPS = 60.0; 59 float gameFPS = 0; 60 float jumpSpeed = 15.0; 61 float velX = 0, velY = 0; 62 const float gravity = 1; 63 float cameraPosition[2] = {0,0}; 64 65 66 67 al_init_image_addon(); 68 al_init_primitives_addon(); 69 al_install_keyboard(); 70 al_init_font_addon(); 71 al_init_ttf_addon(); 72 al_install_audio(); 73 al_init_acodec_addon(); 74 75 initPlayer(player); 76 initArrow(arrow); 77 initCoin(coin1); 78 initCoin2(coin2); 79 80 ALLEGRO_KEYBOARD_STATE keystate; 81 ALLEGRO_TRANSFORM camera; 82 ALLEGRO_SAMPLE *coinCollect = al_load_sample("coin collect sound.wav"); 83 ALLEGRO_SAMPLE *bowShot = al_load_sample("bow sound effect.wav"); 84 ALLEGRO_SAMPLE *bgSong = al_load_sample("Background song.wav"); 85 ALLEGRO_SAMPLE_INSTANCE *songInstance = al_create_sample_instance(bgSong); 86 ALLEGRO_BITMAP *background2 = al_load_bitmap("Background.png"); 87 ALLEGRO_BITMAP *character = al_load_bitmap("spritesheet(Bow & left + right).png"); 88 ALLEGRO_BITMAP *arrow_r = al_load_bitmap("Arrow(RIGHT).png"); 89 ALLEGRO_BITMAP *arrow_l = al_load_bitmap("Arrow(LEFT).png"); 90 ALLEGRO_BITMAP *coin = al_load_bitmap("coin2.png"); 91 //ALLEGRO_BITMAP *key = al_load_bitmap("key.png"); 92 ALLEGRO_BITMAP *ground = al_load_bitmap("Ground.png"); 93 ALLEGRO_FONT *numArrow = al_load_font("JUNGBN__.TTF", 23, 0); 94 ALLEGRO_FONT *fps = al_load_font("JUNGBN__.TTF", 23, 0); 95 ALLEGRO_FONT *numCoin = al_load_font("JUNGBN__.TTF", 23, 0); 96 ALLEGRO_FONT *random = al_load_font("JUNGBN__.TTF", 23, 0); 97 ALLEGRO_TIMER *timer = al_create_timer(1.0/FPS); 98 ALLEGRO_EVENT_QUEUE *event_queue = al_create_event_queue(); 99 100 al_reserve_samples(3); //Respresents how many audio clips I have in the game 101 102 al_set_sample_instance_playmode(songInstance, ALLEGRO_PLAYMODE_LOOP); 103 al_attach_sample_instance_to_mixer(songInstance, al_get_default_mixer()); 104 al_set_window_title(display, "Australian Outback"); 105 al_register_event_source(event_queue, al_get_keyboard_event_source()); 106 al_register_event_source(event_queue, al_get_timer_event_source(timer)); 107 al_register_event_source(event_queue, al_get_display_event_source(display)); 108 109 al_play_sample_instance(songInstance); 110 111 al_start_timer(timer); 112 while(!done) 113 { 114 ALLEGRO_EVENT event; 115 al_wait_for_event(event_queue, &event); 116 al_get_keyboard_state(&keystate); 117 118 if(al_key_down(&keystate, ALLEGRO_KEY_ESCAPE)) 119 { 120 done = true; 121 } 122 else if(event.type == ALLEGRO_EVENT_DISPLAY_CLOSE) 123 { 124 done = true; 125 } 126 127 128 else if(event.type == ALLEGRO_EVENT_TIMER) 129 { 130 active = true; 131 updateArrow(arrow); 132 133 if(al_key_down(&keystate, ALLEGRO_KEY_D)) 134 { 135 velX = player.speed; 136 dir = RIGHT; 137 138 } 139 else if(al_key_down(&keystate, ALLEGRO_KEY_A)) 140 { 141 velX = -player.speed; 142 dir = LEFT; 143 } 144 else 145 { 146 velX = 0; 147 active = false; 148 } 149 if(al_key_down(&keystate, ALLEGRO_KEY_W) && jump) 150 { 151 velY = -jumpSpeed; 152 jump = false; 153 } 154 if(active) 155 { 156 sourceX += al_get_bitmap_width(character) / 3; 157 } 158 else 159 { 160 sourceX = 32; 161 } 162 if(sourceX >= al_get_bitmap_width(character)) 163 { 164 sourceX = 0; 165 } 166 sourceY = dir; 167 draw = true; 168 if(!jump) 169 velY += gravity; 170 else 171 velY = 0; 172 player.x += velX; 173 player.y += velY; 174 175 jump = (player.y >= groundHeight); 176 177 if(jump) 178 { 179 player.y = groundHeight; 180 } 181 182 cameraUpdate(cameraPosition, player, 32, 32); 183 al_identity_transform(&camera); 184 al_translate_transform(&camera, -cameraPosition[0], -cameraPosition[1]); 185 al_use_transform(&camera); 186 187 } 188 189 if(al_key_down(&keystate, ALLEGRO_KEY_SPACE)) 190 { 191 fireArrow(arrow, player, bowShot); 192 } 193 else 194 { 195 fired = false; 196 } 197 if(collision(player, 371, 470, 325, 30, 32, 32)) 198 { 199 groundHeight = 470; 200 player.y = groundHeight; 201 player.y += velY; 202 203 } 204 else if(collision(player, 70, 390, 214, 38, 32, 32)) 205 { 206 groundHeight = 390; 207 player.y = groundHeight; 208 player.y += velY; 209 } 210 else if(collision(player, 79, 275, 214, 30, 32, 32)) 211 { 212 groundHeight = 275; 213 player.y = groundHeight; 214 player.y += velY; 215 216 } 217 else if(collision(player, 313, 220, 261, 30, 32, 32)) 218 { 219 groundHeight = 220; 220 player.y = groundHeight; 221 player.y += velY; 222 } 223 else if(collision(player, 655, 165, 36, 30, 32, 32)) 224 { 225 groundHeight = 165; 226 player.y = groundHeight; 227 player.y += velY; 228 } 229 else if(collision(player, 582, 70, 36, 30, 32, 32)) 230 { 231 groundHeight = 70; 232 player.y = groundHeight; 233 player.y += velY; 234 } 235 else if(collision(player, 763, 30, 36, 30, 32, 32)) 236 { 237 groundHeight = 30; 238 player.y = groundHeight; 239 player.y += velY; 240 } 241 else if(collision(player, 926, 77, 214, 38, 32, 32)) 242 { 243 groundHeight = 77; 244 player.y = groundHeight; 245 player.y += velY; 246 } 247 else if(collision(player, 926, 140, 214, 38, 32, 32)) 248 { 249 groundHeight = 140; 250 player.y = groundHeight; 251 player.y += velY; 252 } 253 else if(collision(player, 1202, 120, 36, 30, 32, 32)) 254 { 255 groundHeight = 120; 256 player.y = groundHeight; 257 player.y += velY; 258 } 259 else 260 { 261 groundHeight = 545; 262 } 263 264 if(coinCollide(coin1, player, coin1.x, coin1.y, coin1.width, coin1.height, 32, 32, coinLive, coinCount)) 265 { 266 coin1.live = false; 267 ++coinCount; 268 coin1.x = 0; 269 coin1.y = 0; 270 al_play_sample(coinCollect, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, 0); 271 } 272 if(coinCollide2(coin2, player, coin2.x, coin2.y, coin2.width, coin1.height, 32, 32, coinLive, coinCount)) 273 { 274 coin2.live = false; 275 ++coinCount; 276 coin2.x = 0; 277 coin2.y = 0; 278 al_play_sample(coinCollect, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, 0); 279 } 280 281 if(draw && al_is_event_queue_empty(event_queue)) 282 { 283 draw = false; 284 al_draw_bitmap(background2, 0, 0, 0); 285 al_draw_bitmap_region(character, sourceX, sourceY * al_get_bitmap_height(character) / 2, 32, 32, player.x, player.y, 0); 286 drawArrow(arrow, arrow_r, arrow_l); 287 drawCoin(coin1, coin); 288 drawCoin2(coin2, coin); 289 al_draw_textf(numArrow, al_map_rgb(252,209, 22), 10, 10, 0, "Arrows: %i", arrow.arrowCount); 290 al_draw_textf(numCoin, al_map_rgb(252, 209, 22), 10, 50, 0, "Coins: %i", coinCount); 291 //al_draw_textf(fps, al_map_rgb(252, 209, 22), 120, 10, 0, "FPS: %i", gameFPS); 292 al_flip_display(); 293 al_clear_to_color(al_map_rgb(255, 255, 255)); 294 295 } 296 } 297 298 al_destroy_bitmap(character); 299 al_destroy_bitmap(ground); 300 al_destroy_bitmap(coin); 301 al_destroy_bitmap(background2); 302 al_destroy_bitmap(arrow_l); 303 al_destroy_bitmap(arrow_r); 304 al_destroy_sample(coinCollect); 305 al_destroy_sample(bowShot); 306 al_destroy_sample(bgSong); 307 al_destroy_sample_instance(songInstance); 308 al_destroy_font(numArrow); 309 al_destroy_font(numCoin); 310 al_destroy_font(fps); 311 al_destroy_display(display); 312 al_destroy_event_queue(event_queue); 313 al_destroy_timer(timer); 314 return 0; 315} 316 317void initArrow(Arrow arrow) 318{ 319 arrow.ID = ARROW; 320 arrow.speed = 4.0; 321 arrow.live = false; 322 arrow.arrowCount = 10; 323} 324void drawArrow(Arrow arrow, ALLEGRO_BITMAP *image, ALLEGRO_BITMAP *image2) 325{ 326 327 if(arrow.live && RIGHT) 328 { 329 al_draw_bitmap(image, arrow.x, arrow.y, 0); 330 } 331 if(arrow.live && LEFT) 332 { 333 al_draw_bitmap(image2, arrow.x, arrow.y, 0); 334 } 335} 336void fireArrow(Arrow arrow, Player &player, ALLEGRO_SAMPLE *bowShot) 337{ 338 if(!arrow.live && !fired ) 339 { 340 --arrow.arrowCount; 341 arrow.live = true; 342 arrow.x = player.x + 17; 343 arrow.y = player.y + 22; 344 fired = true; 345 al_play_sample(bowShot, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, 0); 346 } 347 348} 349void updateArrow(Arrow arrow) 350{ 351 if(arrow.live) 352 { 353 /*if(dir == RIGHT) 354 {*/ 355 arrow.x += arrow.speed; 356 if(arrow.x >= 2000 - 10) 357 { 358 arrow.live = false; 359 } 360 //} 361 /*else if(dir == LEFT) 362 { 363 arrow.x -= arrow.speed; 364 if(arrow.x >= 2000 - 10) 365 { 366 arrow.live = false; 367 } 368 }*/ 369 } 370}

I have not included some stuff to save space. If you want it all, just ask :D

André Silva
Member #11,991
May 2010
avatar

I can see you already know about arguments by value and by reference.
So, I can just point out the problem directly: initArrow has an Arrow passed by value!
Line 12, just change void initArrow(Arrow arrow); to void initArrow(Arrow &arrow);. And on line 317 also, of course.
That should do it.

DJLad16
Member #14,857
January 2013

Ah! I should have know that, thanks anyway :D

Go to: