我对C ++很新,我遇到了试图在另一个类函数中使用一个类对象的问题。例如,如果我有:
#ifndef CARD_HPP
#define CARD_HPP
#include <string>
enum Suits
{
SPADES,
CLUBS,
HEARTS,
DIAMONDS
};
enum Values
{
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING,
ACE
};
class Card
{
public:
Card(Values value, Suits suit);
Values getValue() const;
Suits getSuit() const;
void showCard();
std::string toString(Values v);
std::string toString(Suits s);
private:
Suits suit;
Values value;
};
和:
#ifndef DECK_OF_CARDS_HPP
#define DECK_OF_CARDS_HPP
#include "card.hpp"
#include <vector>
#include <string>
Values enumValueOfIndex(int i);
Suits enumSuitOfIndex(int i);
class DeckOfCards
{
public:
DeckOfCards();
void shuffleDeck();
void printDeck();
Card drawCard();
private:
const std::string suit_strings[4];
const std::string value_strings[13];
unsigned seed;
Values values;
Suits suits;
std::string suit;
std::string value;
std::vector<Card> deck;
};
#endif
我在Deck::printDeck()
尝试时遇到错误:
Card card = deck.at(i); //I have already added 52 card objects to deck
我得到的错误是:
error: non-object type 'Card (Values, Suits)' is not assignable
card = deck.at(i);
我基本上使用旧的Java代码来实现这一点,这基本上就是我所做的。我不知道是否需要在Card
标头/源中定义/声明Deck
对象,甚至不知道如何做到这一点。我觉得这是一个简单的问题,但我找不到任何解决方案。感谢您的任何帮助!
答案 0 :(得分:1)
看起来您需要定义复制构造函数和赋值运算符,请尝试添加:
Card(const Card& rhs);
Card& operator=(const Card& rhs);
答案 1 :(得分:0)
为您的类定义复制赋值构造函数将使=
(赋值运算符)在您的程序中运行。
Card( const Card & input );
如果要为=
运算符指定特殊含义,则应覆盖它。您可以在下面找到一些可以帮助您的资源: