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){ }