所以我尝试制作一个包含我的结构std::vector
的{{1}}
menu.h
tabs
menu.cpp
class CMenu
{
public:
void CMenu::addtab(std::string label, CCords pos, int index);
private:
std::vector<tabs> tablist;
};
struct tabs
{
std::string label;
SPoint pos;
int index;
};
当我尝试编译它时,出现这些错误。
void CMenu::Do()
{
this->addtab("sample tab", CCords( 100, 100 ), 0);
}
void CMenu::addtab(std::string label, CCords pos, int index)
{
tabs tab;
tab.label = label;
tab.pos = pos;
tab.index = index;
tablist.push_back(tab);
}
答案 0 :(得分:10)
从形式上讲,tabs
必须是完整类型,当std::vector
看到它时。因此,即使是tabs
的前向声明(表示不完整的类型)也不够。
这意味着struct
定义必须出现在CMenu
之前。
请注意,此规则相对于C ++ 17有所放宽,在C ++ 17中,向量的声明和实例化的类型可能不完整,受围绕向量分配器的某些约束的约束;标准的相关部分:
[vector.overview] / 3在以下情况下,可以使用不完整的类型T 如果分配器满足分配器,则实例化向量 完整性要求17.6.3.5.1。 T应在任何之前完成 向量的专业化成员被引用。