无法使用 std::array<T, n> 作为 class 成员创建构造函数
Cannot create constructor with std::array<T, n> as class member
这里是代码
#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]; }
};
卡片只是另一张class,与此处无关。
我现在想创建 Deck 构造函数,它将只创建 52 个 Card 对象并将其分配给我的数组。虽然,当我去 Deck.cpp 并开始这样做时
#include "deck.h"
Deck::Deck() {
}
我在引用已删除的函数时遇到错误
'std::array::array(void)': attempting to reference a deleted
function
我不太明白,数组大小在编译时是已知的,现在我只想创建对象并将其分配给这个数组,为什么我不能那样做?
没有意识到 Card 在这种情况下实际上是相关的,无论如何这里是代码
#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);
}
为了默认构造 std::array<Card, DECK_SIZE>
,Card
必须是可默认构造的。你的 Card
class 不是。
这里是代码
#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]; }
};
卡片只是另一张class,与此处无关。 我现在想创建 Deck 构造函数,它将只创建 52 个 Card 对象并将其分配给我的数组。虽然,当我去 Deck.cpp 并开始这样做时
#include "deck.h"
Deck::Deck() {
}
我在引用已删除的函数时遇到错误
'std::array::array(void)': attempting to reference a deleted function
我不太明白,数组大小在编译时是已知的,现在我只想创建对象并将其分配给这个数组,为什么我不能那样做?
没有意识到 Card 在这种情况下实际上是相关的,无论如何这里是代码
#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);
}
为了默认构造 std::array<Card, DECK_SIZE>
,Card
必须是可默认构造的。你的 Card
class 不是。