簡體   English   中英

C ++模板類靜態成員初始化

[英]C++ template class static members initialization

可以請有人幫助我解決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{};

演示版

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM