Problem beim Kompilieren



  • Hallo ich habe ein kleines Poker programm geschrieben allerdings gibt es fehler beim Kompilieren und ich komme nicht weiter..
    Ich stelle hier mal die Codes rein falls jemand einen Fehler findet würde ich mich über eine Korrektur freuen:
    **
    main.cpp**

    #include <iostream>
    #include "Deck.h"
    
    using namespace std;
    
    int main( int argc, char *argv[] ) 
    {
    	Deck * deck = new Deck();
    
    	deck->shuffle();	// shuffle the deck
    
    	deck->deal(3);		// deal 3 cards from the deck
    	deck->deal(2);		// deal 2 more cards from the deck
    
    	deck->dealNext();	// should be the 6 card down in the deck
    
    	// 3 + 2 + 1 + 47 = 53 , which is more then we have to deal
    	deck->deal(47);		// this should cause an error to be printed
    
    	deck->dealNext();	// lets try to deal one more card just to see, it should give an error
    
    	cout << endl;
    
    	// if we shuffle again then we should be able to deal again without an error
    	deck->shuffle();
    	deck->deal(52);		// deal all cards in deck that we just shuffled
    
    	return(0);
    }
    

    Deck.cpp

    #include <iostream>		// basic input output stream
    #include <iomanip>		// input output manipulation
    #include <algorithm>	// random_shuffle()
    
    #include "Deck.h"
    
    using namespace std;
    
    // Constructor
    Deck::Deck()
    {
    	card = new Card();
    
    	this->initialize();
    }
    
    // Deconstructor
    Deck::~Deck()
    {
    	delete card;
    }
    
    // Function: initialize
    // Purpose: 
    void Deck::initialize( void )
    {
    	for( int position = 0; position < card->getTotalCards(); position++ )
    		this->setDeckValue( position );
    }
    
    // Function: shuffle
    // Purpose: shuffle the deck in a randomly
    void Deck::shuffle( void )
    {
    	// TODO: this way of shuffling is not random enough
    	random_shuffle( this->deck, this->deck+52 );
    	card->setRemaining( card->getTotalCards() ); 	// reset the remaining cards on each shuffle
    }
    
    void Deck::deal( int dealNum )
    {
    	// TODO: exception handling needed
    
    	if( this->hasNext() )
    	{
    		for( int position = 0; position < dealNum; position++ )
    			this->dealNext();
    	}
    	else
    	{
    		// TODO: exception handling here
    		// for now i will just do cout some shit
    		cout << "Error: no more cards to deal" << endl;
    	}
    }
    
    void Deck::dealNext( void )
    {
    	if( this->hasNext() )
    	{
    		int position = ( card->getTotalCards() - card->getRemaining() );
    		this->printConsole( position );
    		card->setRemaining( card->getRemaining() - 1 );
    	}
    	else
    	{
    		// TODO: exception handling here
    		// for now i will just do cout some shit
    		cout << "Error: no more cards to deal" << endl;
    	}
    }
    
    bool Deck::hasNext( void )
    {
    	bool available = false;
    
    	if( card->getRemaining() != 0 )
    		available = true;
    
    	return( available );
    }
    
    void Deck::printConsole( int deckPosition )
    {
    	cout << setw( 5 ) << setiosflags( ios::right )
    		 << card->getFaceName( card->getCardNum( this->getDeckValue( deckPosition ) ) ) << " of "
    
    		 << setw( 8 ) << setiosflags( ios::left )
    		 << card->getSuitName( card->getSuitNum( this->getDeckValue( deckPosition ) ) )
    
    		 << ( (deckPosition + 1) % 4 == 0 ? '\n' : '\t' );
    }
    
    void Deck::setDeckValue( int value )
    {
    	// TODO: exception handling needed
    	this->deck[ value ] = value;
    }
    
    void Deck::setDeckValue( int position, int value )
    {
    	// TODO: exception handling needed
    	this->deck[ position ] = value;
    }
    
    int Deck::getDeckValue( int position ) const
    {
    	// TODO: exception handling needed
    	return( this->deck[ position ] );
    }
    

    Card.h

    #ifndef CARD_H_
    #define CARD_H_
    
    class Card {
    
    public:
    
    	Card();									// constructor
    	~Card();								// deconstructor
    
    	int remaining;							// number of cards remaining/available
    
    	// set functions
    	int setRemaining( int );				// calculate and set remaing cards
    
    	// get functions
    	int getCardNum( int );					// get card number
    	int getSuitNum( int );					// get suit number
    
    	int getTotalCards( void ) const;		// get the number of cards in a deck
    	int getTotalSuits( void ) const;		// get the number of suits in a deck
    
    	const char *getFaceName( int ) const;	// get card face name
    	const char *getSuitName( int ) const;	// get card suit name
    
    	int getRemaining( void );				// get the number of remaining cards available
    
    private:
    
    	const int TOTAL_CARDS;					// constant total number of cards
    	const int TOTAL_SUITS;					// constant total number of suits
    
    	const static char *FACE[ 13 ];			// constant array of each different card face name
    	const static char *SUIT[ 4 ];			// constant array of each different card suit name
    
    }; // end Card class
    
    #endif
    

    Deck.h

    #ifndef DECK_H_
    #define DECK_H_
    
    #include "Card.h"
    
    class Deck {
    
    public:
    
    	Deck();											// constructor
    	~Deck();										// deconstructor
    
    	void shuffle( void );							// shuffle deck
    	void deal( int );								// deal a specific number of cards
    
    	bool hasNext( void );							// check for another card to deal
    	void dealNext( void );							// deal the next card in the deck
    
    	void printConsole( int );						// print to console
    
    private:
    
    	int deck[ 52 ];									// deck of cards
    
    	Card * card;									// create a pointer to our cards
    
    	void initialize( void );						// initialize deck
    
    	// utility set functions
    	void setDeckValue( int );						// set a deck value of 0 -> 51, position and value are the same
    	void setDeckValue( int, int );					// set a deck value of 0 -> 51, position and value are different
    
    	// utility get functions
    	int getDeckValue( int ) const;					// get a deck value
    
    }; // end Deck class
    
    #endif
    

    Card.cpp

    #include "Card.h"
    
    using namespace std;
    
    //const int Card::TOTAL_CARDS = 52;	// total number of cards
    //const int Card::TOTAL_SUITS = 4;	// total number of different suits
    
    // constant card names
    const char * Card::FACE[ 13 ] = 
    				{ 
    					"Ace", "King", "Queen", "Jack", "Ten", "Nine", "Eight",
    					"Seven", "Six", "Five", "Four", "Three", "Deuce"
    				};
    
    // constant suit names
    const char * Card::SUIT[ 4 ] = 
    				{ 	
    					"Spades", "Hearts" , "Diamonds", "Clubs"
    				};
    
    // Constructor
    Card::Card(): TOTAL_CARDS(52),TOTAL_SUITS(4),remaining(52){}
    
    // Deconstructor
    Card::~Card()
    {
    	// TODO: de-initialize objects here
    }
    
    int Card::setRemaining( int value )
    {
    	// TODO: exception handling needed
    	this->remaining = value;
    }
    
    int Card::getCardNum( int value )
    {
    	//TODO: exception handling needed
    	return( value % 13 );
    }
    
    int Card::getSuitNum( int value )
    {
    	// TODO: exception handling needed
    	return( value / 13 );
    }
    
    const char * Card::getFaceName( int value ) const
    {
    	//TODO: exception handling needed
    	return( this->FACE[ value ] );
    }
    
    const char * Card::getSuitName( int value ) const
    {
    	//TODO: exception handling needed
    	return( this->SUIT[ value ] );
    }
    
    int Card::getTotalCards( void ) const
    {
    	//TODO: exception handling needed
    	return( this->TOTAL_CARDS );
    }
    
    int Card::getTotalSuits( void ) const
    {
    	//TODO: exception handling needed
    	return( this->TOTAL_SUITS );
    }
    
    int Card::getRemaining( void )
    {
    	return( this->remaining );
    }
    

    Fehlermeldung:

    1>------ Erstellen gestartet: Projekt: Poker, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>main.cpp
    1>.\main.cpp(34) : fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    1>Deck.cpp
    1>.\Deck.cpp(111) : fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    1>Card.cpp
    1>.\Card.cpp(77) : fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\?????\Eigene Dateien\Visual Studio 2008\Projects\Poker\Poker\Release\BuildLog.htm" gespeichert.
    1>Poker - 3 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • Das hatten wir schon unzählige mal. Poste die Fehlermeldung, das liest sich ja kein Mensch durch...



  • allerdings gibt es fehler beim Kompilieren

    welchen?

    btw:
    Deck * deck = new Deck();
    1. wieso?
    2. du hast delete vergessen
    3. nimm Deck deck; und dann einfach . statt ->

    und gibts nen grund, wieso du das this-> immer mitschreibst? macht den code nicht gerade leserlicher 😣

    bb



  • Öffne ein neues Projekt ohne vorkompilierte Header. In Visual Studio kann man das gleich beim erstellen des Projekt's einstellen.


  • Mod

    Ohne vorkompilierte Header arbeiten. Projektoptionen->C/C++->Precompiled Headers



  • Habe nun die Precompiled Headers deaktiviert nun kommt folgende Fehlermeldung:

    1>------ Erstellen gestartet: Projekt: Poker, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>Card.cpp
    1>.\Card.cpp(3) : error C2871: 'std': Es ist kein Namespace mit diesem Namen vorhanden
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\???\Eigene Dateien\Visual Studio 2008\Projects\Poker\Poker\Release\BuildLog.htm" gespeichert.
    1>Poker - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • bitte copy&paste die _aktuelle_ Card.cpp noch mal - zumindest die ersten 3 Zeilen...

    bb



  • ok hier nochmal die Zeilen:

    #include "Card.h"
    
    using namespace std;
    
    //const int Card::TOTAL_CARDS = 52;	// total number of cards
    


  • und die fehlermeldung findest du nicht logisch?

    da du hast alle includes weggemacht hast, kennt der compiler dort keinen namespace std. du brauchst also diese using direktive nicht. die brauchst du immer nur, wenn du sowas _davor_ machst: #include <standard_header> wobei standard_header für all die 49 namen hier stehen kann:
    http://www.cplusplus.com/reference/

    bb



  • Also muss da nun was genau machen??



  • Die Zeile wegmachen...

    btw:
    Card::Card(): TOTAL_CARDS(52),TOTAL_SUITS(4),remaining(52){} wird den nächsten Fehler geben...
    Wieso kannst du im Buch/Tutorial deiner Wahl nachlesen

    bb



  • Also Card::Card(): TOTAL_CARDS(52),TOTAL_SUITS(4),remaining(52){} einfach löschen

    dann des "using namespace std;" löschen

    und dann kompilieren??



  • Jetzt gibt es folgenden Fehler:

    1>------ Erstellen gestartet: Projekt: Poker, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>Card.cpp
    1>Verknüpfen...
    1>Deck.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __clrcall Card::Card(void)" (??0Card@@$$FQAM@XZ)".
    1>C:\Dokumente und Einstellungen\????\Eigene Dateien\Visual Studio 2008\Projects\Poker\Release\Poker.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\????\Eigene Dateien\Visual Studio 2008\Projects\Poker\Poker\Release\BuildLog.htm" gespeichert.
    1>Poker - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • JadenJesse schrieb:

    Also Card::Card(): TOTAL_CARDS(52),TOTAL_SUITS(4),remaining(52){} einfach löschen

    nein(sonst passiert genau das, was jz passierst ist: du bekommst nen linker-fehler, weil du die fkt deklarierst aber nirgendwo definiert hast) - und ich seh auch gerade, dass die zeile doch keinen fehler verursachen wird... hatte nur die zeile hier gesehen:
    //const int Card::TOTAL_CARDS = 52; // total number of cards
    und war deshalb davon ausgeganen, dass es ne static-variable ist...
    warum hast du die beiden varialben eigtl in caps geschrieben? (macht man eigtl nur bei makros oder globalen konstanten)
    und wieso speicherst du es als member? versteh den sinn dahinter nicht... es wird sich ja wohl kaum von instanz zu instanz ändern...

    JadenJesse schrieb:

    des "using namespace std;" löschen

    und dann kompilieren??

    japp

    bb



  • Habe das was du sagtest,was ich löschn soll wieder hinzugefügt...

    Nun kommt folgender Fehler:

    1>------ Erstellen gestartet: Projekt: Poker, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>Card.cpp
    1>Verknüpfen...
    1>Code wird generiert.
    1>c:\dokumente und einstellungen\????\eigene dateien\visual studio 2008\projects\poker\poker\card.cpp(32) : error C4716: 'Card::setRemaining': Muss einen Wert zurückgeben
    1>LINK : fatal error LNK1257: Fehler bei Codegenerierung.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\????\Eigene Dateien\Visual Studio 2008\Projects\Poker\Poker\Release\BuildLog.htm" gespeichert.
    1>Poker - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • JadenJesse schrieb:

    Habe das was du sagtest,was ich löschn soll wieder hinzugefügt...

    Nun kommt folgender Fehler:

    1>------ Erstellen gestartet: Projekt: Poker, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>Card.cpp
    1>Verknüpfen...
    1>Code wird generiert.
    1>c:\dokumente und einstellungen\????\eigene dateien\visual studio 2008\projects\poker\poker\card.cpp(32) : error C4716: 'Card::setRemaining': Muss einen Wert zurückgeben
    1>LINK : fatal error LNK1257: Fehler bei Codegenerierung.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\????\Eigene Dateien\Visual Studio 2008\Projects\Poker\Poker\Release\BuildLog.htm" gespeichert.
    1>Poker - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Der Rückgabewert von setRemaining sollte void und nicht int sein.



  • boar...

    was verstehst du denn an der fehlermeldung nicht?

    int Card::setRemaining( int value ) 
    { 
        // TODO: exception handling needed 
        this->remaining = value; 
    }
    

    rein interesse-halber:
    hast du den quelltext selbst geschrieben? oder nur erweitert?

    ich würde dir nahe legen, erst mal ein wenig selbst zu überlegen und falls du dann noch nicht drauf kommst, erst mal dein buch/tutorial weiterlesen oder nachschlagen und wenn dus dann noch nicht weist, kannste immernoch fragen...
    aber das hier find ich gerade ziemlich nervig...

    bb



  • asdasd schrieb:

    JadenJesse schrieb:

    Habe das was du sagtest,was ich löschn soll wieder hinzugefügt...

    Nun kommt folgender Fehler:

    1>------ Erstellen gestartet: Projekt: Poker, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>Card.cpp
    1>Verknüpfen...
    1>Code wird generiert.
    1>c:\dokumente und einstellungen\????\eigene dateien\visual studio 2008\projects\poker\poker\card.cpp(32) : error C4716: 'Card::setRemaining': Muss einen Wert zurückgeben
    1>LINK : fatal error LNK1257: Fehler bei Codegenerierung.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\????\Eigene Dateien\Visual Studio 2008\Projects\Poker\Poker\Release\BuildLog.htm" gespeichert.
    1>Poker - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Der Rückgabewert von setRemaining sollte void und nicht int sein.

    Das ist jetzt komisch sobald ich das einstelle kommt

    1>------ Erstellen gestartet: Projekt: Poker, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>Card.cpp
    1>.\Card.cpp(28) : error C2182: 'value': Unzulässige Verwendung des Typs 'void'
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\????\Eigene Dateien\Visual Studio 2008\Projects\Poker\Poker\Release\BuildLog.htm" gespeichert.
    1>Poker - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • poste doch mal das stück quelltext, zu der die fehlermeldung gehört (definition und deklaration der fkt) und der verwendeten fkt/var! wenn du das tust, hilft dir bestimmt iwann der nächste.



  • // Constructor
    Card::Card(): TOTAL_CARDS(52),TOTAL_SUITS(4),remaining(52){}
    
    // Deconstructor
    Card::~Card()
    {
    	// TODO: de-initialize objects here
    }
    
    int Card::setRemaining( int value )
    {
    	// TODO: exception handling needed
    	this->remaining = value;
    }
    
    int Card::getCardNum( int value )
    {
    	//TODO: exception handling needed
    	return( value % 13 );
    }
    

    das ist der code der zur fehlermeldung gehört


Anmelden zum Antworten