2010-08-26 132 views
3

我具有类似于在头文件以下代码:C++在模板化的类模板的成员变量具有不完整的类型

template<class A> 
class List { 
    private: 
    QVector<A> _list; 
}; 

其中QVector是标准QT容器。

当我试图让List类型的变量,像这样在另一头文件中的一个成员变量:

class Model { 
    private: 
    List<int *> the_list; 
}; 

我收到以下错误:

In instantiation of 'List<int *>': 
instantiated from here 
error: 'List<A>::_list' has incomplete type 

基本上,我想使用内部QVector存储数据项目的模板化自定义列表。

我认为我的语法有点不合适,所以任何帮助将不胜感激。

+0

您是否包含第二个标头?值得运行的只是预处理阶段,例如“gcc -E”检查事物是否如他们所看到的那样。 – 2010-08-26 02:55:42

回答

5

在申报class List { }之前,请确保您有#include d QVector的头文件。如果你忽略它,QVector是一个未定义的类型,但是因为List是一个模板类,所以编译器在第一次实例化List之前不会省略错误消息。

#include <QVector> 

template<class A> 
class List { 
    private: 
    QVector<A> _list; 
}; 
+0

谢谢!这是问题所在。如果我在缺少的#include上花了几个小时,我必须需要更多的咖啡因:)。 – Aaron 2010-08-26 02:59:17

+0

请注意,许多编译器会为此打印一个错误,即使在此声明和实例化之间定义了QVector,它仍然是一个错误。 – Potatoswatter 2010-08-26 03:01:09

+0

@Patatoswatter,看起来像'QVector'被* forward声明了*,所以如果没有'List '的实例化,编译器确实不允许错误输出。 – 2010-08-27 12:44:55

相关问题