我是编程的新手,试图理解为什么这段代码无法编译。
#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/