繁体   English   中英

向量未知大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM