【发布时间】:2012-07-11 18:24:00
【问题描述】:
简单的问题:我如何让它工作?
struct A {
double whatever;
std::unordered_map<std::string, A> mapToMoreA;
}
g++ 错误:std::pair<_t1 _t2>::second 类型不完整
据我了解,在实例化映射时,编译器需要知道 A 的大小,但它不知道这一点,因为映射是在 A 的声明中声明的,所以解决这个问题的唯一方法是使用指向 A 的指针(不想这样做)?
【问题讨论】:
-
对象需要具有兄弟而不是指针的容器并不常见。用例是什么?
-
@Mark Ransom:恰恰相反,通常需要一个带有兄弟姐妹的容器(例如,树实现)。使用指针通常只是一种解决方法。
-
@AndreyT:图表是最一般的情况,你必须有指针。递归对象 - 例如BinaryTree ::==(可选左:BinaryTree,可选右:BinaryTree)在概念上是常见的数据结构。但是要在 C/C++ 世界中实现它们,您需要指针。左右指针可能是隐藏的,外界看不到,但它们就在那里。即递归和分层数据结构通常就足够了,但不是通用的。
-
你说在std contains中使用指针类似于
struct TreeNode { TreeNode *left, *right; }?不,这是错误的和具有误导性的类比。例如,如果你实现了一个TreeNode和std::vector的指针 到里面的孩子,那将类似于struct TreeNode { TreeNode *(*childen)[2]; }(注意额外的*)。这类似于在TreeNode中存储指向指针数组的指针。这是两层间接层,而不是一层。两个级别是完全没有必要的。
标签: c++ syntax compiler-errors