Dev-C++ "Build Error"
debylni

EDIT:Has been fixed.

So, I'm using Dev-C++ 4.9.9.2 (if it's important) and whenever I compile my code, I get this error: C:\DOCUME~1\MATU~1\PRACOV~1\C__~1\bjsource\Makefile.win [Build Error] ["../../../../../Documents and Settings/Matuš/Pracovná plocha/C++/bjsource/card.o"] Error 1

This is the "main.cpp" code:

#SelectExpand
1#include <allegro.h> 2#include <string> 3#include <vector> 4#include <time.h> 5#include <new> 6#include <sstream> 7#include "card.h" 8#include "button.h" 9#include "player.h" 10 11using namespace std; 12 13static void shuffle(vector<Card>); 14 15int main() { 16 //LOGIC INIT START 17 Player p,cpu; 18 vector<Card> deck; 19 int v; 20 stringstream ss; 21 for(int i=0;i<52;++i) { 22 if(i%13==0) v==11; 23 if(i%13>0 && i%13<9) v=i+1; 24 if(i%13>8) v=10; 25 ss << "cards\\" << i << ".png"; 26 deck.push_back(Card(v,ss.str())); 27 } 28 shuffle(deck); 29 //LOGIC INIT END 30 31 //BUTTON INIT START 32 Button drawBtn(638,370,124,60); 33 const char *drawBtnStd="btn\\drawStd.bmp"; 34 const char *drawBtnClick="btn\\drawClick.bmp"; 35 Button holdBtn(638,435,124,60); 36 const char *holdBtnStd="btn\\holdStd.bmp"; 37 const char *holdBtnClick="btn\\holdClick.bmp"; 38 //BUTTON INIT END 39 40 //ALLEGRO INIT START 41 allegro_init(); 42 install_keyboard(); 43 install_mouse(); 44 install_timer(); 45 set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0); 46 set_window_title("BlackJack Stat v0.5 beta"); 47 show_os_cursor(1); 48 //ALLEGRO INIT END 49 50 //GRAPHICS START 51 rectfill(screen,0,0,600,600,makecol(11,129,16)); //play part (600x600) 52 rectfill(screen,600,0,800,600,makecol(0,0,0)); //info part (200x600) 53 rect(screen,605,5,795,595,makecol(255,255,255)); //info part trimming (5px margin) 54 textout_ex(screen,font,"CPU",10,10,makecol(255,255,255),makecol(11,129,16)); 55 textout_ex(screen,font,"Player",10,450,makecol(255,255,255),makecol(11,129,16)); 56 draw_sprite(screen,load_bitmap(drawBtnStd,0),drawBtn.x,drawBtn.y); //draw button 57 draw_sprite(screen,load_bitmap(holdBtnStd,0),holdBtn.x,holdBtn.y); //hold button 58 //GRAPHICS END 59 60 while(!key[KEY_ESC]) { 61 if(!drawBtn.isClicked() && !holdBtn.isClicked()) { 62 draw_sprite(screen,load_bitmap(drawBtnStd,0),drawBtn.x,drawBtn.y); 63 draw_sprite(screen,load_bitmap(holdBtnStd,0),holdBtn.x,holdBtn.y); 64 } 65 if(drawBtn.isClicked() && !holdBtn.isClicked()) { //draw click 66 draw_sprite(screen,load_bitmap(drawBtnClick,0),drawBtn.x,drawBtn.y); 67 } 68 if(holdBtn.isClicked() && !drawBtn.isClicked()) { //hold click 69 draw_sprite(screen,load_bitmap(holdBtnClick,0),holdBtn.x,holdBtn.y); 70 } 71 72 rest(50); 73 } 74 75 return 0; 76} 77END_OF_MAIN() 78 79static void shuffle(vector<Card> deck) { 80 int a,b; 81 srand(time(NULL)); 82 Card *temp; 83 for(int i=0;i<1024;++i) { 84 a=rand()%deck.size(); 85 b=rand()%deck.size(); 86 temp=new (nothrow) Card(deck[a].getVal(),deck[a].getImgPath()); 87 deck[a]=Card(deck[b].getVal(),deck[b].getImgPath()); 88 deck[b]=Card(temp->getVal(),temp->getImgPath()); 89 } 90 delete temp; 91}

This is the "card.h" code:

#SelectExpand
1#include <string> 2 3#ifndef CARD_H 4#define CARD_H 5 6class Card { 7 private: 8 int val; // <2;11> 9 bool ace; 10 std::string imgPath; 11 public: 12 Card(int,std::string); 13 int getVal(); 14 bool isAce(); 15 std::string getImgPath(); 16}; 17 18#endif

And this is the "card.cpp" code:

#include <string>
#include "card.h"

Card::Card(int v, std::string path) {
    val=v;
    imgPath=path;
    if(v==11) ace=true; else ace=false;         
}    
int Card::getVal() {return val;}   
bool Card::isAce() {return ace;}
std::string Card::getImgPath() {return imgPath;}

Anyone has an idea where the problem might be? I'd appreciate any useful answer.

Dizzy Egg

Has card.o been built and exists in the relevant folder? Also there is no deconstructor in your class...

debylni

Oh, thanks. The problem was that I haven't built all my classes (only main.cpp) and that caused error.
PS: I think that destructor isn't that that important, or is it?

Specter Phoenix
debylni said:

PS: I think that destructor isn't that that important, or is it?

General rule is that if you make your own constructor you need to make your own destructor.

Oscar Giner

That's not really true. Most classes have a constructor, but they don't necessarily need a destructor.

The general rule is that if the class acquires resources (not necessarily at the constructor(s)), it'll need a destructor to release them (unless it's done somewhere else). This is not the case of the OP.

verthex

Using devcpp by the way is like using void main in your programming... way out of date.

Schyfis

It gets the job done and is pretty simple for the most part.
I do recommend Code::Blocks over it though.

Specter Phoenix

That's not really true. Most classes have a constructor, but they don't necessarily need a destructor.

That is not what they drilled into us in my advanced programming course. Kept telling us that if you make a custom constructor then you need to make a custom destructor. Also was told to never use the default constructor, but to write one that at least initializes everything to a default value.

kdevil

Your advanced programming course instructor probably decided it's safer to teach "always include a constructor/destructor" and then let people learn about the exceptions afterwards, rather than the other way around.

As Oscar said, you typically only need a destructor if your class acquires some sort of resource (allocating memory, opening a file, etc.) that needs to be released when the class is destroyed.

For example: If you have a class that contains a pointer, you'll want a constructor that allocates memory for that pointer and a destructor that frees the allocated memory. However, if you have a class that only contains variables like "int a; float b; bool c", it's still a good idea to create a constructor that initializes everything, but a destructor is unnecessary.

Specter Phoenix

Yeah, makes sense. I need to use constructors more in my code but I don't. I normally just let the defaults call and leave it at that.

Thread #609595. Printed from Allegro.cc