I'm sorry if this is in the wrong forum but I have a problem with my program.
For some reason it crashes when I'm trying to assign a string in a constructor.
I'm pretty new to c++ so I'm not sure what I'm doing wrong.
Well anyway here is the code.
Code:Card.cpp #include "Card.h" using namespace std; Card::Card(){ card_name=""; level = 0; attribute = 0; attack=0; defense=0; picture = NULL; } Card::Card(string n_name,unsigned short newlevel,unsigned short newattribute,unsigned short newatk,unsigned short newdef,char *filename){ level = newlevel; //card_name = ""; //this works. //card_name=n_name; //crashes card_name="random string"; //also crashes attribute = newattribute; attack=newatk; defense=newdef; picture = load_bitmap( filename , NULL); // Load our picture } Card::~Card(){ }Code:Card.h #ifndef CARD_H #define CARD_H #include "allegro.h" #include <iostream> #include <string> using std::ostream; using std::string; class Card { public: Card(); Card(string cname,unsigned short lvl, unsigned short atr,unsigned short atk,unsigned short def,char *f); ~Card (); unsigned short level; unsigned short attribute; unsigned short attack; unsigned short defense; BITMAP *picture; string card_name; }; #endifCode:Deck2.h #ifndef DECK2_H #define DECK2_H #include "Card.h" #include <vector> #include <algorithm> #include <ctime> #include <functional> using namespace std; // random generator function: ptrdiff_t myrandom (ptrdiff_t i) { return rand()%i;} // pointer object to it: ptrdiff_t (*p_myrandom)(ptrdiff_t) = myrandom; class Deck2 { public: Card* pakk; Deck2 () { pakk=NULL; kaarte=0; } Deck2 (unsigned short kaartideArv) { pakk=NULL; kaarte=0; generateDeck(kaartideArv); sortDeck(); } ~Deck2 (){ delete [] pakk; } void sortDeck(){ srand(time(0)); vector<Card> kaartVektor (pakk, pakk+kaarte); random_shuffle(kaartVektor.begin(),kaartVektor.end(),p_myrandom); copy(kaartVektor.begin(), kaartVektor.end(), pakk) ; } unsigned int getKaarte(){ return kaarte; } Card takeCard(){ Card tempcard; tempcard=pakk[kaarte-1]; vector<Card> kaartVektor (pakk, pakk+kaarte); kaartVektor.pop_back(); kaarte--; copy(kaartVektor.begin(), kaartVektor.end(), pakk) ; return tempcard; } void addCard (Card card){ Card* temparray; temparray = new Card[kaarte+1]; memcpy(temparray, pakk, sizeof(Card) * kaarte); delete [] pakk; pakk = new Card[kaarte+1]; memcpy(pakk, temparray, sizeof(Card) * kaarte); pakk[kaarte]=card; delete [] temparray; kaarte++; } void generateDeck(unsigned short kaartideArv){ Card kaardipakk[]={ Card("Dark Elf",0,0,0,0,"cards/monsters/dark_elf.bmp") }; kaarte=kaartideArv; pakk = new Card[kaarte]; memcpy(pakk, kaardipakk, sizeof(Card) * kaarte); sortDeck(); } Card& operator[] (unsigned int i){ return pakk[i]; } private: unsigned int kaarte; }; #endifCode:Kaardimang.cpp #include "Card.h" #include "Deck2.h" #include <cstdlib> #include <math.h> using namespace std; int main (int argc, char* argv[]) { // Initialize the Allegro library if (allegro_init () != 0) { allegro_message ("Error initializing the Allegro library!"); return EXIT_FAILURE; } // Set up Allegro functions install_keyboard (); install_timer (); install_mouse (); // Set a windowed graphics mode, 800x600 windowed, 32-bit color depth set_color_depth (desktop_color_depth ()); if (set_gfx_mode (GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0) != 0) { allegro_message ("Error creating 800x600x32 window!"); return EXIT_FAILURE; } Deck2 pakk(1); BITMAP *buffer = NULL; // Declare a BITMAP called buffer. buffer = create_bitmap(800,600); //Create an empty bitmap. show_mouse(screen); while (!key[KEY_ESC]){ blit(buffer, screen, 0,0,0,0,800,600);//Draw the buffer to the screen clear_bitmap(buffer); // Clear the contents of the buffer bitmap } destroy_bitmap(buffer); // Release the bitmap data return EXIT_SUCCESS; } // NB! This is required for Allegro to maintain platform compatibility END_OF_MAIN()




Reply With Quote