2013-11-11 5 views
1

에 대한 호출에 대해 일치하는 함수가 없습니다. 오류로 인해 코드를 컴파일 할 수 없습니다. 여기C++ [오류]

그들 중 일부 : 기능에서

'INT 주 (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; 
} 
+8

오류 메시지를 읽었습니까? – user1810087

+0

@itwasntpete : 글쎄 그건 바보 일 뿐이야 – stellarossa

+1

그래, 내가 읽었을 때 ... – Beginner

답변

33

당신은 deckOfCards 매개 변수 DeckOfCards::shuffle를 호출하려고 :

deckOfCards cardDeck; // create DeckOfCards object 
cardDeck.shuffle(cardDeck); // shuffle the cards in the deck 

는 그러나 방법은 vector<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-to vector<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 a vector ; but I don't. So I won't.

+1

모두 감사합니다! 도움이되었습니다. – Beginner

1

요한의 대답에 추가 : 무엇 당신이 shuffle 함수에 전달하려는 것은 당신이 메인에 선언 한 클래스 deckOfCards에서 한 벌의 카드가

이다; 그러나 클래스에서 선언 한 카드 또는 vector<Card> deck의 갑판은 비공개이므로 수업 외에서는 액세스 할 수 없습니다.

class deckOfCards 
{ 
    private: 
     vector<Card> deck; 

    public: 
     deckOfCards(); 
     static int count; 
     static int next; 
     void shuffle(vector<Card>& deck); 
     Card dealCard(); 
     bool moreCards(); 
     vector<Card>& getDeck() { //GETTER 
      return deck; 
     } 
}; 

이 같은 주에서 셔플 함수를 호출 할 수 있도록 다시이 뜻 : 그러나

deckOfCards cardDeck; // create DeckOfCards object 
cardDeck.shuffle(cardDeck.getDeck()); // shuffle the cards in the deck 

, 당신은 더 많은 문제이이 같은 getter 함수, 뭔가를 원하는 것 의미 특히 cout을 호출 할 때 먼저 dealCard 함수를 잘못 호출한다고 가정합니다. dealCard은 클래스의 구성원 함수이므로 dealCard(cardDeck); 대신 cardDeck.dealCard();과 같이 호출해야합니다.

이제 두 번째 문제가 생깁니다. 표준 출력으로 인쇄하십시오.

cout << cardDeck.dealCard();// deal the cards in the deck 

아직 cout는 표준 타입이 아니다, 그것은을 인쇄하는 방법을 알고하지 않습니다 당신은 다음과 같은 명령을 사용하여 유형 Card의 객체를 당신의 거래 카드를 인쇄하려고하고 있습니다.즉 overload<< 연산자를 사용하여 Card 유형으로 전화를 걸 때 원하는 인쇄물을 인쇄해야합니다.