c++ - 缺少模板参数

标签 c++ templates

这是家庭作业的一部分,但我已尽可能减少问题。所提供的代码实际上并没有做任何事情,只是创建了一些对象,所以我只能解决纯语言问题。

我想我的问题是:一个模板类是否可以创建另一个相同模板类型的类?

任务是有一个 main.cc 如下:

#include "linkedlist.hh"

int main()
{
    LinkedList<int> aList;
    ListIterator elements = aList.iterator(); // if commented out, then no error
}

我有以下 linkedlist.hh:

template <typename T> class LinkedList;
template <typename T> class ListIterator;

template <typename T>
    class LinkedList {
    public:
    ListIterator<T> iterator();
};

template <typename T>
    ListIterator<T> LinkedList<T>::iterator() {
    return new ListIterator<T>;
}

template <typename T>
    class ListIterator {
};

使用 g++-4.6 会出现以下错误:

main.cc: In function ‘int main()’:
main.cc:6:18: error: missing template arguments before ‘elements’
main.cc:6:18: error: expected ‘;’ before ‘elements’

和 clang++-2.9 类似的错误:

main.cc:6:5: error: cannot refer to class template 'ListIterator' without a
      template argument list
    ListIterator elements = list.iterator();
    ^
In file included from main.cc:1:
./linkedlist.hh:16:11: note: template is declared here
    class ListIterator {

更新:是的,如果我可以更改 main.cc,那么我可以执行以下操作,但我认为这不是作业的内容。

主.cc

#include "linkedlist.hh"

int main()
{
    LinkedList<int> aList;
    ListIterator<int> elements = aList.iterator();
}

和linkedlist.hh

template <typename T> class LinkedList;
template <typename T> class ListIterator;

template <typename T>
    class LinkedList {
    public:
    ListIterator<T> iterator();
};

template <typename T>
    ListIterator<T> LinkedList<T>::iterator() {
    ListIterator<T> anIterator;
    return anIterator;
}

template <typename T>
    class ListIterator {
};

最佳答案

不应该是ListIterator<int>吗? ?

关于c++ - 缺少模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7564113/

相关文章:

c++ - 制作需要接受字母和数字组合的密码类型程序?

c++ - 在 C++ 中使用静态类成员

c++ - C++ 有哪些不同版本以及如何知道哪个版本适合什么用途?

variables - 获取 Sphinx 模板中的变量

c++ - SDL2 OpenGL 窗口立即关闭

c++ - 有关shared_ptr和operator new的问题

c++ - 模板特化中参数包的大小

c++ - 为什么成员模板方法必须在类外使用 template<> 进行专门化

c++ - 将 set<template T> 作为参数传递时出错

Java 等效于 C++ 模板 <int val> class foo{ };