在类函数中使用object

时间:2014-03-20 20:09:16

标签: c++

我对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对象,甚至不知道如何做到这一点。我觉得这是一个简单的问题,但我找不到任何解决方案。感谢您的任何帮助!

2 个答案:

答案 0 :(得分:1)

看起来您需要定义复制构造函数和赋值运算符,请尝试添加:

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

答案 1 :(得分:0)

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

Card( const Card & input );

如果要为=运算符指定特殊含义,则应覆盖它。您可以在下面找到一些可以帮助您的资源:

  • C++ Primer 5th Edition预订。第7.1.5章将帮助您理解课程特殊功能
  • Here你会发现其他一些免费的参考文献。
  • Here,您将了解有关运营商重载的更多信息。