在类函数中使用对象

Use object in class function

本文关键字:对象 类函数      更新时间:2023-10-16

我对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代码来做这个,这就是我所做的。我不知道我是否需要在我的Deck头/源中定义/声明Card对象,甚至如何做到这一点。我觉得这是一个简单的问题,但我找不到任何解决办法。谢谢你的帮助!

看起来你需要定义一个复制构造函数和赋值操作符,尝试添加:

Card(const Card& rhs);
Card& operator=(const Card& rhs);

为您的类定义一个复制赋值构造函数将使=(赋值操作符)在您的程序中运行。

Card( const Card & input );

如果您想为=操作符赋予特殊含义,那么您应该覆盖它。你可以在下面找到一些对你有帮助的资源:

  • c++入门第5版书。第7.1.5章将帮助你理解类的特殊函数
  • 在这里你会发现一些其他的参考资料,是免费的。
  • 在这里,您将了解更多关于操作符重载的信息。