gpt4 book ai didi

c++ - 类型定义错误 : where to put typedef and how it should be written?

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:38 26 4
gpt4 key购买 nike

我正在文件 btree.h 中编写一个 btree 实现类“btree”,并在文件 btree_iterator.h 中使用外部迭代器类“btree_iterator”在 btree.tem 中实现,在文件 btree_iterator.tem 中实现

这是 btree.h 的(精简)内容:

#include "btree_iterator.h"

template <typename T> class btree
{
public:

friend class btree_iterator<T>;
typedef btree_iterator<T> iterator;

iterator find(const T& elem);
};

#include "btree.tem"

现在在实现查找功能时,我在 btree.tem 中有以下 stub 实现:

template <typename T> iterator btree<T>::find(const T& elem) //LINE 24
{
return NULL;
}

(我只包含了与我的问题相关的代码行)

编译时出现以下错误:

btree.tem:24: error: expected constructor, destructor, or type conversion before 'btree'

现在我知道这与我在类声明中为迭代器声明了 typedef 的事实有关,因此其作用域仅在该 block 内。但我试图在 btree.tem 中添加另一行 typedef,但它不起作用。

应该怎么写?

最佳答案

这样写:

template <typename T>
typename btree<T>::iterator btree<T>::find(const T& elem) //LINE 24
{
//;;
}

iterator是嵌套类型,你必须写成btree<T>::iterator , 因为它是一个依赖嵌套类型,因为它依赖于模板参数类型 T , 你必须使用 typename还有:

  typename btree<T>::iterator
//^^^^^^^^ must use it as iterator is a dependent type!

这里有详细的解释:

关于c++ - 类型定义错误 : where to put typedef and how it should be written?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com