可以请有人帮助我解决C ++中的一个奇怪问题。我想在模板类中有一个静态成员。该静态成员是另一个类,我必须以某种方式对其进行初始化。我不知道在哪里以及如何初始化该类。我举了一个小例子来说明我遇到的问题。该示例确实可以编译,但不会链接,因为显然找不到静态成员。我哪里做错了?我在哪里可以初始化静态成员。静态成员不是一个简单的变量,我只能在其中分配一个值。在我的程序中,我必须调用更多函数才能初始化静态成员。

#include <iostream>

template<typename T1, typename T2>
class TemplateClass
{
protected:
    T1 t1;
    static T2 t2;

public:
    TemplateClass ();
};

template<typename T1, typename T2>
TemplateClass<T1, T2>::TemplateClass ()
{
    TemplateClass<T1, T2>::t2.initialize (10);
}

class T1Sample
{
private:
    int i;

public:
    T1Sample () : i (1) {};
    int get_i () { return i; };
};

class T2Sample
{
private:
    int i;

public:
    T2Sample () : i (0) {};
    void initialize (int x) { i = x; };
    int get_i () { return i; };
};

class DerivedClass : TemplateClass<T1Sample, T2Sample>
{
private:
    int z;

public:
    DerivedClass () { z = t1.get_i () + TemplateClass<T1Sample, T2Sample>::t2.get_i (); };
    int get_z () { return z; };
};

int main ()
{
    DerivedClass d;
    std::cout << d.get_z () << std::endl;
}

最佳答案

添加定义:

template<typename T1, typename T2>
T2 TemplateClass<T1, T2>::t2{};


Demo

关于c++ - C++模板类静态成员初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59068266/

10-11 18:55