c++ - "undefined reference"到从静态方法访问的模板类的静态成员

标签 c++ templates static

我有一个静态类方法需要访问一个指针 MyTypePointer,因此必须将其声明为静态。因为它是一个模板类,所以我必须将方法放在头文件中,但我不能在头文件中定义 MyTypePointer 。

因此,由于未声明 MyTypePointer,我得到了“undefined Reference” 错误。我怎样才能使这项工作/声明 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
}

非常感谢。

最佳答案

这是一个迟到的完整引用答案,因为这个问题被链接为另一个问题的引用。

已声明但未定义的静态字段的最小损坏示例可能是:

template<typename T>
class A
{
public:
    static T val;
    static void init()
    {
        val=0;
    }
};

int main()
{
    // A::init();
    A<double>::init();
    return 0;
}

修复只是在类定义之后定义静态字段:

template<typename T>
class A
{
public:
    static T val;
    static void init()
    {
        val=0;
    }
};

template<typename T> T A<T>::val; // only change here

int main()
{
    // A::init();
    A<double>::init();
    return 0;
}

关于c++ - "undefined reference"到从静态方法访问的模板类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642103/

相关文章:

c++ - 将 C 数组分配给 C+ +'s std::array? (std::array<T,U> = T[U]) - no suitable constructor exists from "T [U ]"to "std::array<T,U>"

c++ - 有没有一种方法可以使引用成为常量 setter/getter ?

c# - 逆向工程串行通信

c++ - 如何创建一个既接受数组又接受 vector 引用的函数模板?

java - 静态常量在匿名类中有何用处?

c++ - 在 C++ 中声明函数和方法的顺序重要吗

C# 泛型与 C++ 模板 - 需要澄清约束

c++ - 如何将迭代器泛化为某种类型

php - 在 php 中,我如何确保函数中声明的静态变量在函数被调用时不会重新启动?

java - 验证类应该是静态类吗?