返回模板类的方法
method returning template class C++
我想创建一个模板向量,但是当我返回迭代器时出现了一个问题。我一直在网上搜索,但没有找到任何解决办法。下面是代码:
template <class Element>
class VectorDinamic {
public:
VectorDinamic();
void add(Element el);
Element get(int poz);
~VectorDinamic();
void update(Element el,int poz);
int len();
//template <class Element>
//I get errors here: missing type specifier, unexpected token precedin ";" , missing ";" before "<"
vectorDinamicIterator<Element>* iterator();
void del(Element el);
private:
Element* elems;
int lg;
int capacitate;
void resize();
};
template <class Element>
class vectorDinamicIterator{
public:
vectorDinamicIterator(VectorDinamic* vect){
this->curent=0;
this->vec = vect;
}
Element element()
{
return vec->get(this->curent);
}
void next(){
curent++;
}
private:
int curent;
VectorDinamic* vec;
};
template <class Element>
VectorDinamic<Element>::VectorDinamic() {
capacitate = INIT_CAPACITY;
elems = new Element[capacitate];
lg = 0;
}
//I get errors down here: iterator is not a member of VectorDinamic<Element>,
template <class Element>
vectorDinamicIterator<Element>* VectorDinamic<Element>::iterator()
{
vectorDinamicIterator iter = new vectorDinamicIterator(this);
return iter;
}
我省略了一些方法实现以保持代码简短,我在我得到错误的地方添加了注释,我不知道为什么。没有"iterator"方法,代码运行得很好。
您缺少vectorDinamicIterator
的(前向)声明。每个名字都必须在使用前声明。
template < class Element >
class vectorDinamicIterator;
template <class Element>
class VectorDinamic {
public:
VectorDinamic();
void add(Element el);
Element get(int poz);
~VectorDinamic();
void update(Element el,int poz);
int len();
vectorDinamicIterator<Element>* iterator(); // <- name must be known
void del(Element el);
private:
Element* elems;
int lg;
int capacitate;
void resize();
};
template <class Element>
class vectorDinamicIterator{
public:
typedef VectorDynamic<Element> Vector; //<---- specify template argument!
vectorDinamicIterator(Vector* vect){
this->curent=0;
this->vec = vect;
}
Element element()
{
return vec->get(this->curent);
}
void next(){
curent++;
}
private:
int curent;
Vector* vec;
};
Yam Marcovic是对的,您还需要在VectorDinamic<Element>::iterator()
的定义中指定模板参数:
template <class Element>
VectorDinamic<Element>::VectorDinamic() {
capacitate = INIT_CAPACITY;
elems = new Element[capacitate];
lg = 0;
}
template <class Element>
vectorDinamicIterator<Element>* VectorDinamic<Element>::iterator()
{
vectorDinamicIterator<Element>* iter =
new vectorDinamicIterator<Element>(this);
return iter;
// or simply
// return new vectorDinamicIterator<Element>(this);
// but I don't see why you return a pointer to a dynamically allocated
// iterator, instead of just an iterator
}
您没有在变量声明及其构造函数中指定模板。
要修复,只需return new vectorDinamicIterator<Element>(this);
编辑:哦,是的,正如DyP注意到的,你缺少forward声明。由于某些原因,我没有注意到那部分
相关文章:
- 从父类方法返回子类对象
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 让bool方法返回其他整数
- 不能将方法返回的值用于另一个方法
- 从私有成员变量的成员方法返回unique_ptr
- 我的模板类方法返回错误类型?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 我无法使用C++指针指向类方法返回的 std::vector
- 对象引用中的字段以不同的方法返回不同的值
- 类方法返回指向具有模板的类成员的指针
- 如何将字符串从 C++/CLI 方法返回到调用它的非托管C++
- 从工厂方法返回的ComPtr的引用计数增加两次
- 如何使用 SFINAE 从 end() 方法返回 (const_) 迭代器
- Arduino trim() 和 replace() 方法返回从 'void' 到非标量类型'String'请求的转换
- 从类方法返回 "const char*" 作为 std::string&
- 如何使用 "get" 方法返回类的私有 std::unique_ptr 成员
- 可能从单个方法返回不同类型的对象
- qml 未知方法返回类型:ArchiveFile*,即使调用了 qmlRegisterUncreatableType
- 如何从方法返回静态常量 int std::array?
- 当从其他方法返回 vector 时,C++无法访问矢量元素