使用自身作为参数的模板类

使用自身作为参数的模板类

我是编程的新手,试图理解为什么这段代码无法编译。

#include <iostream>
#include <set>

template <class T>
class Parent {
    protected:
        std::set<T*>* list;
    public:
        Parent() {
            list = new std::set<T*>;
        }
        ~Parent() {}
};

int main() {
    Parent<Parent>* f = new Parent<Parent>;

    return 0;
}

我有这样的错误:
test5.cpp: In function 'int main()':
test5.cpp:23:18: error: type/value mismatch at argument 1 in template parameter
list for 'template<class T> class Parent'
test5.cpp:23:18: error:   expected a type, got 'Parent'
test5.cpp:23:23: error: invalid type in declaration before '=' token
test5.cpp:23:42: error: type/value mismatch at argument 1 in template parameter
list for 'template<class T> class Parent'
test5.cpp:23:42: error:   expected a type, got 'Parent'

谢谢!

最佳答案

您弄错了,编译器无法在编译过程中推导类型T。没有父类型,有父类型,其中T可以是您想要的任何值,例如int,class等。

Parent< int >* f = new Parent< int >();

或(取决于此列表应该执行的操作,但是如果要设置相同的对象)
template <class T>
class Parent {
    protected:
        std::set< Parent<T> *>* list;
    public:
        Parent() {
            list = new std::set< Parent< T >*>;
        }
        ~Parent() {}
};

我假设您知道由集合分配引起的内存泄漏,并且可能由于指向集合元素的指针而导致了内存泄漏。

关于c++ - 使用自身作为参数的模板类。 C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31367328/

10-11 09:09