可以请有人帮助我解决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/