C++ C++;认为模板类';构造函数是具有int返回类型的函数

C++ C++;认为模板类';构造函数是具有int返回类型的函数,c++,class,templates,C++,Class,Templates,我一直得到的编译器错误 error: non-template type ‘const_iterator’ used as a template In function ‘int const_iterator()’: error: only constructors take base initializers warning: no return statement in function returning non-void 但是,我使用const_迭代器作为构造函数 删除其他内容的相关代

我一直得到的编译器错误

error: non-template type ‘const_iterator’ used as a template
In function ‘int const_iterator()’:
error: only constructors take base initializers
warning: no return statement in function returning non-void
但是,我使用const_迭代器作为构造函数

删除其他内容的相关代码:

.h文件:

template <class T>
class test {

    public:

        // Forward declaration 
        class const_iterator;


        template <class Y>
        class const_iterator{
            public:
                template<class A> friend class test;

                // Default constructor
                const_iterator();
            private:
                Y* current;
        };
};
模板
课堂测试{
公众:
//远期申报
类常量迭代器;
模板
类常量迭代器{
公众:
模板类测试;
//默认构造函数
常量迭代器();
私人:
Y*电流;
};
};
.cpp文件:

// Default constructor
template <class T> 
test<T>::const_iterator<T>::const_iterator() : m_current(NULL){ }
//默认构造函数
模板
test::const_iterator::const_iterator():m_current(NULL){}

如果希望实际使用.cpp文件中的模板方法,则无法在其中定义它们,因此只需将实现移到头文件并保持简单。

当向前声明模板类时,需要包含模板部分。这样做,
常量迭代器的前向声明如下

template <class Y>
class const_iterator;

// now you can use const_iterator as an incomplete type
在将模板类在.h和.cpp文件之间分离时,您还将遇到另一个问题。您不能使用模板来实现这一点。有关该主题的更多信息,请参见:

template <class T> // for test
template <class Y> // for const_iterator
test<T>::const_iterator<Y>::const_iterator() : current(nullptr){ }