我如何使用QVector模板?

时间:2011-11-17 16:45:35

标签: c++ qt qt4

目前,我有这个:

void ClassA::aFunction(QVector<ClassB *> items) {
    //stuff
}

我想将ClassA :: aFunction的参数转换为带有模板的QVector:

template <class T *> class QVector;
void ClassA::aFunction(QVector<T *> items) {
    //stuff
}

这给了我语法错误,那么正确的方法是什么?

修改

我现在有这个:

classA.h:

template <class T>
class ClassA {
public:
    void myFunction(ClassB *);
}

classA.cpp:

template <class T>
void ClassA<T>::myFunction(ClassB * b) {
    QVector<T *> var = b->myBFunction();
}

classB.h:

template <class T>
class ClassB {
public:
    void myBFunction();
private:
    QVector<T *> myVar;
}

classB.cpp:

template <class T>
QVector<T *> ClassB<T>::myBFunction() {
    return this->myVar;
}

我在ClassA :: myFunction中遇到语法错误“找不到成员声明”。我在ClassA :: myFunction中也有一个错误“方法'myBFunction'无法解析”。如何解决这两个错误?

EDIT2 想出来了:

classA.h:

class ClassA {
public:
    template <class T> void myFunction(ClassB *);
}

classA.cpp:

template <class T>
void ClassA::myFunction(ClassB * b) {
    QVector<T *> var = b->myBFunction<T>();
}

classB.h:

class ClassB {
public:
    template <class T> void myBFunction();
private:
    template <class T> QVector<T *> myVar;
}

classB.cpp:

template <class T>
QVector<T *> ClassB::myBFunction() {
    return this->myVar;
}

1 个答案:

答案 0 :(得分:3)

几乎是对的:

template <class T> void ClassA::aFunction(QVector<T *> items)
{
    //stuff
}

你必须在类定义中以相同的方式声明:

class ClassA
{
  template <class T> void aFunction(QVector<T*>);
  // ...
};

顺便问一下,你为什么要按价值传递QVector