我得到了:
error: default argument for template parameter for class enclosing 'ticker<T, E, A>::garbage_element'
51 | E ticker<T,E,A> ::garbage_element;
| ^~~~~~~~~~~~~~~
我知道如果我使用关键字"inline"这样的:
inline static E garbage_element;
在"代码"模板,它编译得很好,但是在模板之外它应该是什么样子呢?
#include <iostream>
#include <vector>
template< template<class, class> class T, class E, class A = std::allocator<E> >
class ticker
{
T<E,A>* container;
int current_index;
bool mode;
static E garbage_element;
public:
// constructors and members fn
};
template< template<class, class> class T, class E, class A = std::allocator<E> >
E ticker<T,E,A> ::garbage_element;
在定义类模板的静态数据成员时,如果该类模板的其中一个模板形参有默认实参,则该默认实参不应重复。只需要一次当第一次声明/定义类模板时。
这意味着在类外部定义成员garbage_element
时,不需要为参数A
指定默认实参,如下所示:
//-------------------------------------------------------v-->no default argument here
template<template<class, class> class T, class E, class A>
E ticker<T,E,A>::garbage_element;
演示工作