C++:专业成员需要"模板<>"语法
C++: specializing member requires «template<>» syntax
我做错了什么?
template<class T>
class Binder
{
public:
static std::vector< Binder< T >* > all;
Node<T>* from;
Node<T>* to;
Binder(Node<T>* fnode, Node<T>* tonode)
{
from = fnode;
to = tonode;
Binder<T>::all.push_back(this);
}
};
std::vector<Binder<int>*> Binder<int>::all = std::vector< Binder<int>* >(); //here it is
谢谢。
静态成员的定义被编译器解释为专用化(实际上,它是一种专用化:您正在给出特定于T = int
的声明)。这可以通过在定义之前添加template<>
来修复。
在模板中定义静态成员有点令人沮丧:静态成员需要在标头外部定义,这只有在您已经知道绑定程序的所有可能T
时才有可能。
例如,现在您正在为T=int
定义它。现在,如果您在某处开始使用Binder<double>
,则静态成员将是一个未定义的引用。
相关文章:
- 需要"模板<>"语法 --> 通过函数调用类模板
- 如何创建一个function_list<>类来保存具有相同模板语法的 std::function<>s 向量?
- 模板别名上下文中的模板<>模板<>语法有什么用?
- 仅替换成员函数的模板语法
- 可变模板的模板语法问题
- unique_ptr之外的数组模板语法
- C++:专业成员需要"模板<>"语法
- 此模板语法是否非法
- 错误:专业成员需要"模板<>"语法
- 具有递归大小写结尾的模板语法错误
- c++模板语法说明
- 如何修复 Google OR-Tools 中的 C++03 双尖括号模板语法错误
- 模板语法说明
- C++ 编译器将模板语法视为'<'运算符
- 模板语法错误
- 函数模板语法错误
- 带有函数类型参数的c++模板语法
- c++模板语法模板参数
- 模板语法和无符号类型是什么?
- 用于分类抽象类的模板语法