无法使用std :: array <t,n =“”>作为类成员

时间:2017-12-14 09:45:03

标签: c++ stdarray

这里是代码

#include "card.h"
#include <array>

constexpr int DECK_SIZE = 52;

class Deck {
    std::array<Card, DECK_SIZE> m_deck; 
public:
    Deck();
    ~Deck() = default;
    Card getCard(int index) { return m_deck[index]; }
};

卡片只是另一类,与此无关。 我想现在创建Deck构造函数,它将创建52个Card对象并将其分配给我的数组。虽然,当我去Deck.cpp并开始这样做

#include "deck.h"

Deck::Deck() {    
}

我收到错误,我引用了删除的功能

  

'std :: array :: array(void)':尝试引用已删除的   功能

我真的不明白,数组大小在编译时是已知的,现在我只想创建对象并将其分配给这个数组,为什么我不能这样做?

没有意识到卡在这种情况下是行为相关的,无论如何这里是代码

#include <SFML/Graphics.hpp>

constexpr auto FILE_PATH = "res\\cards\\";

class Card {
    char m_rank;
    char m_suit;
    int m_value;
    sf::RectangleShape m_shape;
    sf::Texture m_texture;
public:
    Card(char, char, int, std::string);
    ~Card() = default;

    char getRank() { return m_rank; }
    char getSuit() { return m_suit; }
    int getValue() { return m_value; }
    void setValue(int p_value) { m_value = p_value; }
    sf::Texture getTexture() { return m_texture; }
    sf::RectangleShape getShape() { return m_shape; }
    void setPosition(float p_x, float p_y) { m_shape.setPosition(p_x, p_y); }
};

Card::Card(char p_rank, char p_suit, int p_value, std::string p_texture_file_name)
    :m_rank(p_rank), m_suit(p_suit), m_value(p_value) {
    m_texture.loadFromFile(FILE_PATH + p_texture_file_name);
    m_shape.setSize((sf::Vector2f(70, 90)));
    m_shape.setTexture(&m_texture);
}

1 个答案:

答案 0 :(得分:3)

为了默认构造std::array<Card, DECK_SIZE>Card必须是默认构造的。你的Card课不是。