C++ [错误] 没有匹配的调用函数
Posted
技术标签:
【中文标题】C++ [错误] 没有匹配的调用函数【英文标题】:C++ [Error] no matching function for call to 【发布时间】:2013-11-11 17:50:58 【问题描述】:由于一些错误,我无法编译我的代码。
这里有一些:
在函数'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;
【问题讨论】:
您阅读错误信息了吗? @itwasntpete: 好吧,那简直太傻了 您是否仔细阅读并尝试理解? 我发现这篇文章很有帮助,尤其是@JohnDibling 的回答 谢谢,@LastTigerEyes。 '感激不尽 【参考方案1】:您正在尝试使用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&)'
释义:
嘿,伙计。您正在尝试调用一个名为
shuffle
的函数 显然需要一个类型的参数 reference-to-deckOfCards
,但是没有这个功能。
错误:
[Note] candidate is:
In file included from main.cpp
[Note] void deckOfCards::shuffle(std::vector&)
释义:
我的意思是,也许你指的是另一个名为
shuffle
的函数,但那 一个引用到vector<something>
。
错误:
[Note] no known conversion for argument 1 from 'deckOfCards' to 'std::vector&'
如果我知道如何从
deckOfCards
到vector
;但我没有。所以我不会。
【讨论】:
谢谢大家!这很有帮助。【参考方案2】:添加到约翰的答案:
您想要传递给shuffle
函数的是您在main 中声明的deckOfCards
类中的一副牌;但是,您在课堂上声明的纸牌或vector<Card> deck
是私有的,因此无法从课堂外访问。这意味着您需要一个 getter 函数,如下所示:
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;
;
这将反过来允许您从 main 调用您的 shuffle 函数,如下所示:
deckOfCards cardDeck; // create DeckOfCards object
cardDeck.shuffle(cardDeck.getDeck()); // shuffle the cards in the deck
但是,您遇到了更多问题,特别是在调用cout
时。首先,您错误地调用了dealCard
函数;因为dealCard
是一个类的成员函数,你应该这样称呼它cardDeck.dealCard();
而不是dealCard(cardDeck);
。
现在,我们来解决您的第二个问题 - 打印到标准输出。您正在尝试使用以下说明打印您的交易卡,它是Card
类型的对象:
cout << cardDeck.dealCard();// deal the cards in the deck
然而,cout
不知道如何打印它,因为它不是标准类型。这意味着您应该 overload 您的 <<
运算符在使用 Card
类型调用时打印您想要打印的任何内容。
【讨论】:
以上是关于C++ [错误] 没有匹配的调用函数的主要内容,如果未能解决你的问题,请参考以下文章
c++ 错误:没有匹配的函数用于从函数内调用“getline”,但在 main 中有效
错误:没有调用“Square::Square(Square Color &,Location*)”的匹配函数