【问题标题】:C++ Create Template in Class [duplicate]C ++在类中创建模板[重复]
【发布时间】:2013-08-18 06:45:30
【问题描述】:

您好,我尝试创建一个列表类。 但是为了有一个列表类的变体,我使用模板将值存储在项目变量中。

下面是“List.h”

template <class ListItemType>
    class List
    {
        public:
            .........
            .........

        private:
            struct ListNode
            {
                ListItemType item;
                ListNode    *next; 
            };

        int size; 
        ListNode *head;
        ListNode *find(int index) const;
    };

那么如何在List.cpp中创建“ListNode *find(int index) const”函数的实现呢?

我尝试使用

template <class ListItemType>
    List<ListItemType>::ListNode *List<ListItemType>::find(int index) const
    {
        ........
    }

但是有一个错误说“错误:在'List::ListNode'之前需要'typename',因为'List'是一个依赖范围”

你知道如何在 List.cpp 中实现“ListNode *find(int index) const”吗?

这是我第一次使用模板,我有点困惑。 谢谢

【问题讨论】:

  • 错误很明显(模板通常不是这种情况)。你需要typename List&lt;ListItemType&gt;::ListNode
  • @juanchopanza 好的,谢谢,假设我将列表声明为指针,将其分配给实例,并且我希望该模板具有整数值。我该怎么做?
  • 为什么要指针?只需创建一个对象:List&lt;int&gt; my_list;
  • @juanchopanza 好的。为什么,当我试图在另一个类(List my_list;)中声明它时,我创建了。当调用该类构造函数时,会出现错误提示“未定义对 'List::List()' 的引用”
  • 那是因为链接器找不到List的默认构造函数的实现。确保所有实现都在头文件中。

标签: c++ class templates struct


【解决方案1】:

因为ListNode 是您需要编写的模板类中的类型名称:

typename List<ListItemType>::ListNode

此外,您的模板的实现可能需要对所有人可见。我不会把它放到一个单独的 .cpp 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2016-05-23
    • 2010-11-01
    • 1970-01-01
    • 2022-01-15
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多