错误:“列表”不是模板类型

时间:2012-04-19 05:11:23

标签: c++ g++

我是c ++的初学者所以请原谅我,如果我的错误在下面变得愚蠢。尽管如此,我仍然坚持使用我的代码,并希望得到任何帮助。

尝试通过make via g ++编译时出现以下错误:

In file included from A.cpp:2:
List.h:20: error: ‘List’ is not a template type
A.cpp: In member function ‘void A::NowyObiekt(int)’:
A.cpp:6: error: ‘list_a’ was not declared in this scope
make: *** [A.o] Error 1

我的代码分为以下 tiny 文件:

  • A.h:http://pastebin.com/QQ04xx2j(标题)
  • A.cpp:下面

    #include "A.h"
    #include "List.h"
    
    void A::NewObject(int i)
    {
            list_a.Add(i);
    }
    
    int A::Compare(int a, int b)
    {
            if ( a>b ) return 1;
            if ( a<b ) return -1;
            else return 0;
    }
    
  • List.h:下面(标题)

    #ifndef LIST_H
    #define LIST_H
    template<typename T>
    class Node
    {
        Node()
        {
            nxt = pre = 0;
        }
        Node(const T& el, Node *n = 0, Node *p = 0 )
        {
            dana = el; nxt = n; pre = p;
        }
        T dana;
        Node *nxt, *pre;
    };
    
    template<typename T>
    class List
    {
    public:
        List()
        {
            head = tail = 0;
        }
        void Add(const T&);
    protected:
        Node<T> *head,*tail;
    };
    
    #endif
    
  • List.cpp:http://pastebin.com/a3HQ9yZ4

  • prog.cpp:下面(主要)

    #include "List.h"
    #include "A.h"
    
    int main()
    {
        int i = 5;
        class List list_a;
        class A obj;
    
        obj.Add(i);
    }
    
  • ,makefile为:http://pastebin.com/GTR5jW54

如上所述,我仍然是初学者,所以请理解。我会感谢任何帮助和明确的解释。提前谢谢。

1 个答案:

答案 0 :(得分:4)

您的代码存在一些问题:第一个问题是您没有在任何地方声明任何名为list_a的变量。那个错误应该很明显。另一个是您使用List类而不给它模板参数。

最后一个关于你的问题的小记:由于你的文件确实非常小,你可以将它们放在问题中而不是链接到它们。

修改:关于List模板问题。

您已在Node中正确使用List,即将节点声明为Node<T>。使用List时,您只需执行相同操作即可。例如,要声明一个整数列表:

List<int> my_int_list;

此外,由于您只使用来自班级List的{​​{1}}中的公共函数,因此您不需要A声明。如果您需要使用受保护或私有成员(IMO是设计不良的标志),您还需要将该朋友声明模板化:

friend

最后,你的代码无论如何都不会编译......原因是当你使用模板类时,必须完全定义整个类(即完成其函数实现)。您可以通过将函数放在头文件中来解决此问题。在定义函数时,您还需要模板参数:

friend class List<sometype>;

请注意,我在几个地方添加了模板参数。