【发布时间】:2014-01-05 16:25:33
【问题描述】:
我有一个静态类方法,它需要访问指针 MyTypePointer,因此必须将其声明为静态。由于它是一个模板类,我必须将方法放在头文件中,但我无法在头文件中定义 MyTypePointer。
所以我得到 "undefined Reference" 错误,因为 MyTypePointer 没有声明。我怎样才能使这项工作/声明 MyTypePointer。
myclass.h
template <typename A, typename B>
class PathfindingClass {
typedef std::vector<GenericEdgeClass<A, B>*> MyType;
static MyType *MyTypePointer;
};
template <typename A, B>
void MyClass<A, B>::MyMethod(int x, int y) {
//do something with MyTypePointer
}
非常感谢。
【问题讨论】:
-
您需要在模板声明中(在标题中)为其添加一个定义。
-
实际上,您的问题是“定义”静态成员,而不是声明它。而且我认为您必须自己在 CPP 文件中明确地为您的类模板的每个实例化执行此操作。不过我可能错了!
-
@yzt 不,它应该在标题中定义。链接器将处理多个实例化。
-
@πάνταῥεῖ:哦,谢谢!该死的,一直以来我一直在猜测链接器并为自己制造这个特殊的问题!