首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++模板类静态成员初始化

C++模板类静态成员初始化
EN

Stack Overflow用户
提问于 2019-11-27 10:40:02
回答 1查看 66关注 0票数 0

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

代码语言:javascript
运行
复制
#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;
}
EN

Stack Overflow用户

回答已采纳

发布于 2019-11-27 10:43:22

增加定义:

代码语言:javascript
运行
复制
template<typename T1, typename T2>
T2 TemplateClass<T1, T2>::t2{};

演示

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59068266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档