'T'不是参数'Derived'的有效模板参数

时间:2019-01-20 21:55:44

标签: c++ class templates c++14 crtp

我试图在数组类中声明一个迭代器类,然后在数组类之外实现它。但是,我遇到语法错误。我不确定为什么这不起作用。我只能推断出问题出在我尝试实现数组迭代器的过程中。我在下面标记了给定错误的行。询问您是否需要发布其他任何代码或进行某种解释,我删除了很多代码以防止发布混乱。

编辑:我用正确的标题替换了错误的标题。我收到了不同的错误,这些错误是通过放置typename关键字修复的。有人可以解释为什么typename关键字是我的迭代器类实现的原因吗?我没有收到的错误是

  

std_bidirectional_iterator:ds :: Array :: iterator不是派生参数的有效模板参数。

Array.h

var vm = _context.Person
    .Select(x => new IndexListItem
    {
        Name = x.Name,
        Address = x.Address?.FirstLine + " " + x.Address?.SecondLine,
        ID = x.ID
    })
    .ToList();

std_bidirectional_iterator.h

#include "Common.h"
#include "ArrayInterface.h"
#include "std_bidirectional_iterator.h"

template<class T, size_t N>
class ds::ArrayTwo : public ArrayInterface<T>
{
    class iterator; // Tried with all following implementations
    template<class T> class reverse_iterator;

    template<class U> class const_iterator;
    template<class T> class const_reverse_iterator;
};

template<class T, size_t N>
// Error on line below[fixed by typename]
class ds::ArrayTwo<T, N>::iterator : public std_bidirectional_iterator<typename ds::ArrayTwo<T, N>::iterator, T>
{
};

0 个答案:

没有答案