[英]Vector unknown size
我有一个包含实例变量的类Player:
vector<Card> userCards;
为了避免任何编译错误,我转发了Card
类。 但是现在当我尝试构建解决方案时,我收到一条错误消息:
卡*:大小未知。
基本上,我试图创建一个包含不固定数目的纸牌的Player
,因此我尝试使用矢量,但现在无法使用它。
播放器
#include <iostream>
#include <vector>
using std::string;
using std::vector;
#ifndef PLAYER_H_
#define PLAYER_H_
class Card;
class Player {
private:
vector<Card> userCards;
};
#endif
卡h
#include <iostream>
using std::string;
#ifndef CARD_H_
#define CARD_H_
class Card {
private:
string name;
string type;
public:
Card(const string& name, const string& type);
};
#endif
我有一堆不相关的不同功能,因此没有包括在内。
std::vector
的类型模板参数不能为不完整的类型。 必须在实例化std::vector<Card>
之前定义(完成)。 为此,请更换您的前向申报class Card;
使用#include "Card.h"
指令。
您可以在此处查看对模板参数的进一步要求。
我现在用的是假设你列入Player.h文件Card.h头#include "Card.h"
指令
但是,如果没有通知您std::vector<T>
要求其参数为完整类型,则不能将前向声明的类型作为其模板参数传递。
这是另一个阐明您问题的问题/答案: 什么时候可以使用前向声明?
向量不必知道您要存储多少张卡,而必须知道Card
的大小 。
因此,请勿转发声明,而是#include
includeCard.h。
vector<Card>
需要查看Card
的完整声明。 实例化需要某些功能。
你可以做一些像
vector<unique_ptr<Card>> userCards;
但是,它的行为就像任何指针(引用)声明,并接受前向声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.