繁体   English   中英

错误是什么意思? 关于C ++模板参数

[英]What does the error mean? about C++ template argument

#include <stdio.h>

template<typename T, typename T2, template <typename T> class TemplateClass>

class TemplateTemplateClass {
public:
    TemplateTemplateClass(const TemplateClass& tempClass)
        : _internalClass(tempClass) {
    }

    void doTest() {
        _internalClass.doTest();
    }
private:
    TemplateClass _internalClass;
};

上面的代码在编译时会给出以下错误信息:

$ g++ TemplateTemplateClass.cpp
TemplateTemplateClass.cpp:7:33: error: invalid use of template-name 'TemplateClass' without an argument list
TemplateTemplateClass.cpp:7:48: error: ISO C++ forbids declaration of 'tempClass' with no type [-fpermissive]
TemplateTemplateClass.cpp:15:5: error: invalid use of template-name 'TemplateClass' without an argument list
TemplateTemplateClass.cpp: In constructor 'TemplateTemplateClass<T, T2, TemplateClass>::TemplateTemplateClass(const int&)':
TemplateTemplateClass.cpp:8:11: error: class 'TemplateTemplateClass<T, T2, TemplateClass>' does not have any field named '_internalClass'
TemplateTemplateClass.cpp: In member function 'void TemplateTemplateClass<T, T2, TemplateClass>::doTest()':
TemplateTemplateClass.cpp:12:9: error: '_internalClass' was not declared in this scope

如果我像下面这样更改它,则可以成功编译它。

class TemplateTemplateClass {
public:
    TemplateTemplateClass(const TemplateClass<T>& tempClass)
        : _internalClass(tempClass) {
    }

    void doTest() {
        _internalClass.doTest();
    }
private:
    TemplateClass<T> _internalClass;
};

因此,考虑到以上错误消息,我的问题是,在TemplateClass<T><T>是什么意思? 为什么不能将其删除?

您已经告诉编译器, TemplateClass是带有单个类型参数的模板:

template<typename T, typename T2, template <typename T> class TemplateClass>
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

现在,为了使用TemplateClass ,您必须告诉编译器该参数是什么,例如TT2intstd::string等。

template <typename T> class TemplateClass

TemplateClass是一个模板类。 在您提供必需的类型之前,模板是不完整的类。 在这种情况下,您应该提供T

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM