2

我正在尝试使用 stlplus ntree 类并使用它编写了一个程序,并且在 Windows 环境中编译它没有问题。我试图将它移植到 Ubuntu 中,但有错误。

stlplus ntree 类使用模板。这是我的代码示例

ntree<rule_node_struct> t;
ntree<rule_node_struct>::iterator cur_it;
if (cur_it == t.root())
{
// do something
}

当我使用 g++ 编译时,我收到以下错误消息

在 'bool stlplus::ntree_iterator::operator==(const this_iterator&) const [with T = rule_node_struct; TRef = rule_node_struct&; TPtr = rule_node_struct*;stlplus::ntree_iterator::this_iterator = stlplus::ntree_iterator]':
/usr/lib/stlplus3-03-08/containers/ntree.tpp:133:19: 错误:'equal' 没有在这个范围内声明,并且没有声明是通过在实例化点的参数相关查找找到
的stlplus::ntree_node >' 未通过非限定查找找到
/usr/lib/stlplus3-03-08/containers/ntree.tpp:133:19:注意:请改用 'this->equal'

为什么 g++ 有这个错误,而 Windows Visual Studio 没有?

4

1 回答 1

3

这似乎是ntree类中的一个错误,因为 G++ 对符号进行了正确的两阶段查找,而 VC 似乎接受了损坏的代码。请注意,早期版本的 G++ 也接受这种代码 (AFAIK),因此它仅在存储库的最新版本中得到修复。虽然那个版本是 2010 年的。在我看来,它从未进入任何版本,所以使用 HEAD 版本或要求他们发布。

于 2013-05-06T09:22:30.527 回答