Я новичок в 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
или даже как это сделать. Я чувствую, что это простая проблема, но я не могу найти для нее никакого решения. Спасибо за любую помощь!
Похоже, вам нужно определить конструктор копирования и оператор присваивания, попробуйте добавить:
Card(const Card& rhs);
Card& operator=(const Card& rhs);
Определение конструктора присваивания копий для вашего класса приведет к тому, что оператор =
(оператор присваивания) будет запущен в вашей программе.
Card( const Card & input );
Если вы хотите присвоить специальное значение для оператора =
, вы должны переопределить его. Ниже вы можете найти некоторые ресурсы, которые помогут вам:
Card
. Каковы ваши переменные-члены? Любыеconst
или ссылки члены переменных? Любые `= delete` функции-члены? Наследование отboost::noncopyable
или что-то?