C ++中的结构模板

时间:2018-07-07 18:21:10

标签: c++

我有一个头文件,

class CListEx
{
public:
    CListEx();
    ~CListEx();

    void InitList();
    void AddList(char * msg);

private:

    template <typename T>
    struct MyList {
        T data;
        int num;
    };
};

现在在Cpp文件中,

void CListEx::InitList()
{
    MyList *my = new MyList();
}

这会带来错误,

类模板“ CListEx :: MyList”的E0441参数列表丢失

错误C2514'CListEx :: MyList':类没有构造函数

有什么想法吗?

我尝试过的事情:

我尝试了以下方法,但也给出了错误。

template <typename T >MyList *my = new template <typename T >MyList();

2 个答案:

答案 0 :(得分:1)

错误消息给出了一个非常明确的原因:类模板的参数列表丢失。意思是,您应该编写一些代码,例如:

void CListEx::InitList()
{
    MyList<int> *my = new MyList<int>();
}

例如在https://www.programiz.com/cpp-programming/templates

上阅读模板。

答案 1 :(得分:0)

这是您要做什么吗?

class CListEx
{
public:
    template <typename T>
    void InitList();
private:
    template <typename T>
    struct MyList {
        T data;
        int num;
    };
};

template <typename T>
void CListEx::InitList()
{
    MyList<T> *my = new MyList<T>();
}

int main()
{
    CListEx cle;
    cle.InitList<int>();
}

还是您要这样做?

template <typename T>
class CListEx
{
public:
    void InitList();
private:
    struct MyList {
        T data;
        int num;
    };
};

template <typename T>
void CListEx<T>::InitList()
{
    MyList *my = new MyList();
}

int main()
{
    CListEx<int> cle;
    cle.InitList();
}

当心内存泄漏。最好使用std::unique_prt中的<memory>