由于一些错误,我无法编译我的代码.
其中一些:
在函数’int main(int,char **)’中:
[Error] no matching function for call to 'deckOfCards::shuffle(deckOfCards&)' [Note] candidate is: In file included from main.cpp [Note] void deckOfCards::shuffle(std::vector<Card>&) [Note] no known conversion for argument 1 from 'deckOfCards' to 'std::vector<Card>&' [Error] 'dealCard' was not declared in this scope
#include <iostream> using namespace std; class Card { private: int m_suit; int m_face; public: Card(int face,int suit); static string suits[]; static string faces[]; string toString(string s_face,string s_suit); int getFace(); void setFace(int face); int getSuit(); void setSuit(int suit); }; Card::Card(int face,int suit) { m_face = face; m_suit = suit; } string Card::suits[] = {"Hearts","Diamonds","Clubs","Spades"}; string Card::faces[] = {"Ace","Deuce","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"}; int Card::getFace(){return m_face;} void Card::setFace(int face){m_face = face;} int Card::getSuit(){return m_suit;} void Card::setSuit(int suit){m_suit = suit;} string Card::toString(string s_face,string s_suit) { string card = s_face + " of " + s_suit; return card; } #include <iostream> // cout #include <algorithm> // random_shuffle #include <vector> // vector #include <ctime> // time #include <cstdlib> #include "Card.h" using namespace std; class deckOfCards { private: vector<Card> deck; public: deckOfCards(); static int count; static int next; void shuffle(vector<Card>& deck); Card dealCard(); bool moreCards(); }; int deckOfCards::count = 0; int deckOfCards::next = 0; deckOfCards::deckOfCards() { const int FACES = 12; const int SUITS = 4; int currentCard = 0; for (int face = 0; face < FACES; face++) { for (int suit = 0; suit < SUITS; suit++) { Card card = Card(face,suit); //card created and initialized deck.push_back(card); currentCard++; } } } void deckOfCards::shuffle(vector<Card>& deck) { random_shuffle(deck.begin(),deck.end()); /*vector<Card>::iterator iter; for (iter = deck.begin(); iter!=deck.end(); iter++) { Card currentCard = *iter; random_shuffle(deck.begin(),deck.end()); Card randomCard = deck[num]; //change values..... }*/ } Card deckOfCards::dealCard() { Card nextCard = deck[next]; next++; return nextCard; } bool deckOfCards::moreCards() { if (count < 52) { count++; return true; } else return false; } #include <iostream> #include "deckOfCards.h" using namespace std; int main(int argc,char** argv) { deckOfCards cardDeck; // create DeckOfCards object cardDeck.shuffle(cardDeck); // shuffle the cards in the deck while (cardDeck.moreCards() == true) { cout << dealCard(cardDeck);// deal the cards in the deck } return 0; }
解决方法
您正尝试使用deckOfCards参数调用DeckOfCards :: shuffle:
deckOfCards cardDeck; // create DeckOfCards object cardDeck.shuffle(cardDeck); // shuffle the cards in the deck
但该方法采用向量< Card>&:
void deckOfCards::shuffle(vector<Card>& deck)
编译器错误消息非常清楚.我会在编译器与你谈话时解释它.
错误:
[Error] no matching function for call to 'deckOfCards::shuffle(deckOfCards&)'
转述:
Hey,pal. You’re trying to call a function called
shuffle
which
apparently takes a single parameter of type
reference-to-deckOfCards
,but there is no such function.
错误:
[Note] candidate is: In file included from main.cpp [Note] void deckOfCards::shuffle(std::vector&)
转述:
I mean,maybe you meant this other function called
shuffle
,but that
one takes a reference-tovector<something>
.
错误:
[Note] no known conversion for argument 1 from 'deckOfCards' to 'std::vector&'
Which I’d be happy to call if I knew how to convert from a
deckOfCards
to avector
; but I don’t. So I won’t.