2014-10-30 5 views
-1

С моей программой что-то не так.итератор использовать о карте

Ошибка «Список отсутствующих аргументов функции».

Я делаю карточную программу для показа карточек. Я не знаю, как правильно использовать итераторы.

void Deck::ShowDeck() 
    { 
     vector<Card>::iterator dealt; 

     for (dealt = cards.begin(); dealt != cards.end(); dealt++) 
     { 
      cout<<*dealt<<" "; 
     } 
    } 

вот мой deck.h так могли бы вы дать мне более конкретный ответ? Я изменил '* сданных' в 'dealt-> ул', но он по-прежнему неправильно #ifndef _DECK_H_ #define _DECK_H_

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

/** 
* This class represents a standard 52-card poker deck 
*/ 
class Deck 
{ 
public: 
    /** 
    * Default constructor. This will initialize and shuffle the deck 
    */ 
    Deck(); 

    /** 
    * Reinitilaize the deck and shuffle it. 
    */ 
    void Shuffle(); 

    /** 
    * Dump out the contents of the current deck, minus already dealt cards 
    */ 
    void ShowDeck(); 

    /** 
    * Return a vector of cards that are dealt. 
    * @param count number of cards to deal 
    * @return a set of cards from the front of the deck 
    */ 
    std::vector<Card> Deal(int count); 


private: 
    std::vector<Card> cards; 
    std::vector<Card>::iterator dealt; 
    std::vector<Card> deal; 


/* Your code here */ 

}; 

#endif //_DECK_H_ 

это card.cpp

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

using namespace std; 

Card::Card() 
{ 
} 



std::string Card::str() 
{ 
    ostringstream os; 
    os << valToStr() << suitToStr(); 
    return os.str(); 
} 



std::string Card::suitToStr() 
{ 
    switch(suit) 
    { 
    case 1: 
     return"C"; 
     break; 
    case 2: 
     return"D"; 
     break; 
    case 3: 
     return"H"; 
     break; 
    case 4: 
     return"S"; 
     break; 
    default: 
     break; 
    } 
} 

std::string Card::valToStr() 
{ 
    switch (value) 
    { 
     case 2: 
      return "TWO"; break; 
     case 3: 
      return "THREE"; break; 
     case 4: 
      return "FOUR"; break; 
     case 5: 
      return "FIVE"; break; 
     case 6: 
      return "SIX"; break; 
     case 7: 
      return "SEVEN"; break; 
     case 8: 
      return "EIGHT"; break; 
     case 9: 
      return "NINE"; break; 
     case 10: 
      return "TEN"; break; 
     case 11: 
      return "JACK"; break; 
     case 12: 
      return "QUEEN"; break; 
     case 13: 
      return "KING"; break; 
     case 14: 
      return "ACE"; break; 
     default: break; 
    } 
} 

/* Your code here */ 

И это карта. h

#ifndef _CARD_H_ 
#define _CARD_H_ 

#include <string> 
/** 
* Card class. This class represents a single playing card 
*/ 

class Card 
{ 
public: 
    /** 
    * Suits of playing cards 
    */ 
    typedef enum SUITS { CLUBS = 1 , DIAMONDS, HEARTS, SPADES } SUITES; 

    /** 
    * The value of the card: 2 through Ace 
    */ 
    typedef enum COUNT { TWO = 2, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE } COUNT; 

    /** 
    * Default constructor 
    */ 
    Card(); 



    /** 
    * Constructor to initialize our suit and value 
    * 
    * @param _suit enum of SUITS 
    * @param _val value of the card (COUNT enum) 
    */ 
    Card(Card::SUITS _suit, Card::COUNT _val) 
    { 

    this->suit=_suit; 
    this->value=_val; 

    } 


    /** 
    * Get a string representation of the card. 
    * @return string in the format similar to this: "10D", which would be 10 
    * of diamonds 
    */ 
    std::string str(); 

    /** 
    * Accessor to get this card's suit 
    * @return value of this card's suit 
    */ 
    SUITS getSuit() 
    { 
     return suit; 
    } 


    /** 
    * Accessor to get this card's value 
    * @return value of this card 
    */ 
    COUNT getValue() 
    { 
     return value; 
    } 


private: 
    Card::SUITS suit; 
    Card::COUNT value; 
    std::string suitToStr(); 
    std::string valToStr(); 


/* Your code here */ 


}; 

#endif // _CARD_H_ 
+0

В чем проблема с этим кодом? Неясно, что он делает и что он должен делать. – kraskevich

+1

Нет ничего плохого в фрагменте кода, который вы нам показали. Где именно происходит ошибка? – Cameron

+1

Ошибка может произойти из-за того, что ваш код не имеет 'operator <<', определенного для класса 'Card'. –

ответ

1

Итератор - это просто объект, используемый для перемещения элементов Карты (независимо от того, что вы точно не указали). Вы можете получить доступ к члену объекта вы пересекающие с итератором так:

void Deck::ShowDeck() 
{ 
    vector<Card>::iterator dealt; 

    for (dealt = cards.begin(); dealt != cards.end(); dealt++) 
    { 
     cout<<dealt->suitToStr<<" "; // equivalent to (*dealt).cardType 
    } 
} 

Пожалуйста, более конкретно, и я могу изменить этот ответ лучше помочь вам.

+0

Спасибо, но не могли бы вы быть более конкретными? Я изменил на deal-> cardType, но он по-прежнему не прав. Я добавил код –

+1

Что такое «Карточка»? Я не могу помочь вам, пока не узнаю, что у членов карты. –

+0

Я добавил карту.cpp и card.h. Спасибо за помощь. –

Смежные вопросы