<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Crashes because of class</title>
		<link>http://www.allegro.cc/forums/view/591490</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 21 May 2007 20:20:44 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have a class called TerrainClass, and ever since I added it to my program it has caused errors at runtime. </p><p>Here&#39;s the terrain.h and terrain.cpp files:</p><p>terrain.h
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/* Kelly Crawford 21 May 2007</span></td></tr><tr><td class="number">2</td><td><span class="c">   Terrain header file */</span></td></tr><tr><td class="number">3</td><td>   </td></tr><tr><td class="number">4</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">class</span> TerrainClass<span class="k2">{</span></td></tr><tr><td class="number">7</td><td>public:</td></tr><tr><td class="number">8</td><td>     </td></tr><tr><td class="number">9</td><td>     TerrainClass<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>     ~TerrainClass<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>     </td></tr><tr><td class="number">12</td><td>     <span class="k1">void</span> PaintTerrain<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>     </td></tr><tr><td class="number">14</td><td>private:</td></tr><tr><td class="number">15</td><td>     </td></tr><tr><td class="number">16</td><td>     <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="c">//------------------------------------------------------</span></td></tr></tbody></table></div></div><p>

Terrain.cpp
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/* Kelly Crawford 21 May 2007</span></td></tr><tr><td class="number">2</td><td><span class="c">   Terrain source file */</span></td></tr><tr><td class="number">3</td><td>   </td></tr><tr><td class="number">4</td><td><span class="p">#include "terrain.h"</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>TerrainClass::TerrainClass<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">7</td><td><span class="c">/* Creates terrain from min to max with amount of hills */</span></td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>     bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">200</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>     </td></tr><tr><td class="number">11</td><td><span class="k2">}</span></td></tr><tr><td class="number">12</td><td><span class="c">//------------------------------------------------------</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>TerrainClass::~TerrainClass<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr><tr><td class="number">18</td><td><span class="c">//------------------------------------------------------</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td><span class="k1">void</span> TerrainClass::PaintTerrain<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">)</span></td></tr><tr><td class="number">21</td><td><span class="c">/* Paints the terrain to buffer */</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</td><td>     <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bmp, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, bmp-&gt;w, bmp-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>     <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td><span class="k2">}</span></td></tr><tr><td class="number">26</td><td><span class="c">//------------------------------------------------------</span></td></tr><tr><td class="number">27</td><td><span class="c">//------------------------------------------------------</span></td></tr></tbody></table></div></div><p>

And the game class code:</p><p>game.cpp
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/** Kelly Crawford, 15 May 2007</span></td></tr><tr><td class="number">2</td><td><span class="c">    GameClass definitions */</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="p">#include "game.h"</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">volatile</span> <span class="k1">int</span> tick_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// for the timer</span></td></tr><tr><td class="number">8</td><td><span class="k1">void</span> add_tick<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>tick_count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span><span class="k2">}</span><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>add_tick<span class="k2">)</span> <span class="c">// function to increment ticks</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>GameClass::GameClass<span class="k2">(</span><span class="k1">int</span> gfx_mode, <span class="k1">int</span> w, <span class="k1">int</span> h, <span class="k1">int</span> depth<span class="k2">)</span></td></tr><tr><td class="number">11</td><td><span class="c">/*  Initializes the game and allegro. The screen</span></td></tr><tr><td class="number">12</td><td><span class="c">    is set to widthxheight, with a graphics mode defined</span></td></tr><tr><td class="number">13</td><td><span class="c">    by gfx_mode */</span></td></tr><tr><td class="number">14</td><td><span class="k2">{</span></td></tr><tr><td class="number">15</td><td>    <span class="c">// store screen parameters</span></td></tr><tr><td class="number">16</td><td>    width <span class="k3">=</span> w<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    height <span class="k3">=</span> h<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    </td></tr><tr><td class="number">19</td><td>    <span class="c">// initialize allegro</span></td></tr><tr><td class="number">20</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>    <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    </td></tr><tr><td class="number">24</td><td>    <span class="c">// install timer</span></td></tr><tr><td class="number">25</td><td>    <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>tick_count<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>add_tick<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>add_tick, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    </td></tr><tr><td class="number">30</td><td>    <span class="c">// set up graphics</span></td></tr><tr><td class="number">31</td><td>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>depth<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>gfx_mode, width, height, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>    </td></tr><tr><td class="number">33</td><td>    </td></tr><tr><td class="number">34</td><td>    game_state <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    </td></tr><tr><td class="number">36</td><td>    buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    </td></tr><tr><td class="number">38</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>    </td></tr><tr><td class="number">40</td><td>    mouse_down <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    cur_firework <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td><span class="k2">}</span></td></tr><tr><td class="number">43</td><td><span class="c">//------------------------------------------------------</span></td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td>GameClass::~GameClass<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">46</td><td><span class="c">/*  Destroy any bitmaps and release memory here */</span></td></tr><tr><td class="number">47</td><td><span class="k2">{</span></td></tr><tr><td class="number">48</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td><span class="k2">}</span></td></tr><tr><td class="number">50</td><td><span class="c">//------------------------------------------------------</span></td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td><span class="k1">void</span> GameClass::UpdateState<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">53</td><td><span class="c">/* Updates the game logic, making use of the timer */</span></td></tr><tr><td class="number">54</td><td><span class="k2">{</span></td></tr><tr><td class="number">55</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span>tick_count&gt;0<span class="k2">;</span>tick_count--<span class="k2">)</span><span class="k2">{</span>                 </td></tr><tr><td class="number">56</td><td>         </td></tr><tr><td class="number">57</td><td>         <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a> <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span> mouse_down <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>         <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a> <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span> mouse_down <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>         </td></tr><tr><td class="number">60</td><td>         <span class="k1">if</span><span class="k2">(</span>mouse_down<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">61</td><td>              explo<span class="k2">[</span>cur_firework<span class="k2">]</span>.SetParticle<span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a>, <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>              <span class="k3">+</span><span class="k3">+</span>cur_firework<span class="k2">;</span></td></tr><tr><td class="number">63</td><td>              <span class="k1">if</span><span class="k2">(</span>cur_firework <span class="k3">&gt;</span><span class="k3">=</span> MAX_FIREWORKS<span class="k2">)</span> cur_firework <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>         <span class="k2">}</span>     </td></tr><tr><td class="number">65</td><td>         </td></tr><tr><td class="number">66</td><td>         <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> MAX_FIREWORKS<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">67</td><td>              <span class="k1">if</span><span class="k2">(</span>explo<span class="k3">&lt;</span>i&gt;.exist<span class="k2">)</span> explo<span class="k3">&lt;</span>i&gt;.MoveParticle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>         </td></tr><tr><td class="number">69</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">70</td><td><span class="k2">}</span></td></tr><tr><td class="number">71</td><td><span class="c">//------------------------------------------------------</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td><span class="k1">void</span> GameClass::Paint<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">74</td><td><span class="c">/*  Called after all logic is updated - updates screen */</span></td></tr><tr><td class="number">75</td><td><span class="k2">{</span></td></tr><tr><td class="number">76</td><td>    terrain.PaintTerrain<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> MAX_FIREWORKS<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">78</td><td>         explo<span class="k3">&lt;</span>i&gt;.PaintParticle<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, buffer-&gt;w, buffer-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">80</td><td>    clear<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td><span class="k2">}</span></td></tr><tr><td class="number">82</td><td><span class="c">//------------------------------------------------------</span></td></tr><tr><td class="number">83</td><td><span class="c">//------------------------------------------------------</span></td></tr></tbody></table></div></div><p>

Basically, the game.cpp file&#39;s functions UpdateState() and Paint() are called every loop, UpdateState() is within a timer to keep the game running at a steady flow. A TerrainClass called terrain is declared in game.h. I think it is something in the constructor for TerrainClass that the error is occuring. </p><p>When the game is compiled and run it says (in Vista):</p><p>tank.exe has stopped working.<br />--- Searching for a solution to problem</p><p>And it has an exit button.</p><p>What is happening?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (moon_rabbits)</author>
		<pubDate>Mon, 21 May 2007 09:45:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I bet this is the problem line. You should be checking it&#39;s return value.</p><div class="source-code snippet"><div class="inner"><pre>bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span> bmp <span class="k3">=</span><span class="k3">=</span> NULL <span class="k2">)</span>
<span class="k2">{</span>
  <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"bmp is NULL!"</span><span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Mon, 21 May 2007 11:17:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Judging from what you have posted, you are putting your instance of TerrainClass on the stack (Ie &quot;TerrainClass terrain;&quot; instead of &quot;TerrainClass *terrain;&quot; followed by a &quot;terrain = new TerratinClass();&quot; in the init code), which means you will try to create the bitmap before you initiate allegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Mon, 21 May 2007 12:34:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, it was crashing because Allegro wasn&#39;t initialized before the TerrainClass was.</p><p>I used Jonatan&#39;s solution, but now I get these compiler errors and am unsure why:</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
- In member function `void GameClass::Paint()&#39;: <br />- `PaintTerrain&#39; has not been declared <br />- request for member of non-aggregate type before &#39;(&#39; token
</p></div></div><p>

But PaintTerrain has been declared and defined, etc.</p><p>EDIT: Oops, I&#39;m an idiot. -&gt;!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (moon_rabbits)</author>
		<pubDate>Mon, 21 May 2007 20:20:44 +0000</pubDate>
	</item>
</rss>
