C++ 没有构造函数"Card::Card"实例与参数列表匹配

C++ No instance of constructor "Card::Card" matches the argument list

本文关键字:Card 参数 列表 实例 C++ 构造函数      更新时间:2023-10-16

这是我的卡结构头文件:

#include "stdafx.h"
enum Suits {clubs, diamonds, hearts, spades};
enum Ranks {two = 2, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace};
struct Card {   
    Card (Suits suit, Ranks rank);
private:
    Suits suit_;
    Ranks rank_;
};

我在cpp:中初始化卡成员变量

#include "stdafx.h"    
#include "Card.h"
#include "Header.h"
using namespace std;
Card::Card (Suits suit, Ranks rank) : suit_(suit), rank_(rank) {}

现在,我正在尝试解析一堆卡定义字符串,例如函数中的2C、3h、7s、10h

int FileParsing(vector<Card> & v, char * FileName) {
    ... //omiting the details, basically open FileName, parse card definition strings
    //After I finish parsing 10h, I tried to push it back
    v.push_back(Card(ten, hearts)); //got an error here
    ... 
    return 0;
}

我的怀疑是卡中的类型冲突(套装、等级),但我不确定。任何意见都将不胜感激

v.push_back(Card(ten, hearts)); //got an error here 

这一定不是吗

v.push_back(Card(hearts, ten));

您的构造函数先适应,然后排名。

Card::Card (Suits suit, Ranks rank) : suit_(suit), rank_(rank) {}

当您在这里创建它时,您的参数是向后的。

v.push_back(Card(hearts, ten));
v.push_back(Card(ten, hearts)); //got an error here

应写成:

v.push_back(Card(hearts, ten)); //fixed

因为Card的第一个参数应该是Suits,第二个参数应该为Ranks

如果tenhearts相应地属于SuitsRanks类型,那么看起来您的构造函数参数的顺序不对。构造函数是Card(Suits, Ranks),但您正在尝试调用Card(Ranks,Suits)。切换你的构造函数参数,它应该会起作用。