#c
Вопрос:
У меня ошибка компилятора при попытке добавить каждую карту(масть и ранг) в карту объекта.
Вот Card.h
файл:
#define CARD_H
#include <iostream>
using namespace std;
class Card{
private:
int rank;
int suit;
public:
// must have constructors, destructor, accessor methods, and mutator methods
Card();
Card(int, int);
~Card();
int get_rank();
int get_suit();
void set_rank(int);
void set_suit(int);
string fillrank(int) ;
string fillsuit(int) ;
void printcards();
/*
string getr_ank();
string gets_uit();
void setr_ank(string);
void sets_uit(string);
*/
};
#endif
Card.cpp
#include <iostream>
#include "card.h"
#include <string>
using namespace std;
Card::Card(){
rank = 0;
suit = 0;
}
Card::Card(int r, int s){
rank = r;
suit = s;
//cout << "Parameterized constructor" << endl;
}
int Card::get_rank(){
return rank;
}
int Card::get_suit(){
return suit;
}
void Card::set_rank(int rank){
this->rank = rank;
}
void Card::set_suit(int suit){
this->suit = suit;
}
string Card::fillrank(int rank) {
switch(rank){
case 0:
return "Ace";
break;
case 1:
return "2";
break;
case 2:
return "3";
break;
case 3:
return "4";
break;
case 4:
return "5";
break;
case 5:
return "6";
break;
case 6:
return "7";
break;
case 7:
return "8";
break;
case 8:
return "9";
break;
case 9:
return "10";
break;
case 10:
return "Jack (J)";
break;
case 11:
return "Queen (Q)";
break;
case 12:
return "King (K)";
break;
}
}
string Card::fillsuit(int suit) {
switch(suit){
case 0:
return "Clubs";
break;
case 1:
return "Spades";
break;
case 2:
return "Hearts";
break;
case 3:
return "Diamonds";
break;
}
}
void Card::printcards(){
cout << rank << " of " << suit << endl;
}
Card::~Card(){
cout << "Destructor called!" << endl;
deck.h
#ifndef DECK_H
#define DECK_H
#include "card.h"
class Deck{
private:
Card cards[52];
int n_cards; //Number of cards remaining in the deck.
public:
//must have constructors, destructor, accessor methods, and mutator methods.
Deck();
int get_cards();
void set_cards(int);
void filldeck();
void printdeck();
~Deck();
};
#endif
deck.cpp
#include <iostream>
#include "deck.h"
#include <string>
using namespace std;
Deck::Deck(){
n_cards = 0;
}
int Deck::get_cards(){
return n_cards;
}
void Deck::set_cards(int cards){
n_cards = cards;
}
void Deck::filldeck(){
int a = 0;
Card p1;
for (int x = 0; x <13 ;x ){
for(int y = 0; y < 4; y ){
cards[a] = p1.fillrank(x);
cards[a] = p1.fillsuit(y) ;
a ;
}
}
}
void Deck::printdeck(){
for (int i = 0; i < 52; i ){
cards[i].printcards();
}
}
Deck::~Deck(){
}
This is the error I'm getting:
deck.cpp:52:22: error: no match for ‘operator=’ (operand types are ‘Card’ and ‘std::string {aka std::basic_string<char>}’)
cards[a] = p1.fillrank(x);
ard.h:7:7: note: Cardamp; Card::operator=(const Cardamp;)
class Card{
^
card.h:7:7: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const Cardamp;’
deck.cpp:53:22: error: no match for ‘operator=’ (operand types are ‘Card’ and ‘std::string {aka std::basic_string<char>}’)
cards[a] = p1.fillsuit(y) ;
Почему я не могу заполнить каждый ранг и масть в карточном объекте? чего мне здесь не хватает? как я должен подойти к этому? Заранее благодарю вас.
Комментарии:
1. Поп-тест: что
fillrank()
возвращает ваш метод? Какие значения хранятся вcard[]
массиве? Можете ли вы назначить одно другому (ответ, конечно, отрицательный, это то, что говорит вам ваш компилятор C , но ответы на первые два вопроса укажут вам на причину).
Ответ №1:
Здесь происходит то, что ваш fillrank
и fillsuit
на самом деле не заполняет ранг и масть этой карты, вместо этого он возвращает ранг и масть, которыми она должна быть заполнена.
Чтобы на самом деле заполнить ранг, вам нужно сделать что-то подобное rank = "Ace"
в этой функции.
Таким образом, вы бы изменили свою функцию на что-то вроде:
void fillrank(int rank)
{
switch(rank)
{
case 0:
this.rank = "Ace";
break;
case 1:
this.rank = "2";
break;
case 2:
.
.
.
}
}
И в вашей filldeck
функции вы можете просто вызвать каждую карту из колоды и применить fillrank
ее непосредственно, например:
cards[a].fillrank(x);
Комментарии:
1. В этом есть смысл. Я ценю вашу помощь!