类模板外的静态成员定义



我得到了:

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;

演示工作

最新更新