模板声明不能出现在块范围内(模板 class in main)

a template declaration cannot appear at block scope (template class in main)

这是我的代码:

#include <iostream>
using namespace std;
template<typename T>
class List
{
    public:
        List(T);
};
template<typename T>
class A: public List<T>
{
    public:
};
int main()
{   //my problem is here...!
    A a(10);
}

我不知道如何在main中声明这个class并使用它。 在这种情况下,我有这个错误:

missing template arguments before ‘a’

当我写的时候:

template(typename T)
   A a(10);

我给出这个错误:

g++ -std=c++11 -c main.cpp error: a template declaration cannot appear at block scope template ^~~~~~~~

std::vector 

是模板化的,因此您可以将其称为 std::vector<int>。因此,您的声明应该是 A<int> a(10);

由于你没有为 A 编写构造函数,我想你想使用继承的构造函数,因此你必须在 A

中提供以下行
using List<T>::List;

而且由于你使用了c++11,你必须提供模板arg,如下

A<int> a(10);

如果你想让编译器解决这个问题,请使用 c++17c++20 并提供以下指南

template<class T> A(T)-> A<T>;

现在带有 c++17 的完整代码将是

template<typename T>
class List
{
public:
    List(T) {}
};
template<typename T>
class A: public List<T>
{
public:
    using List<T>::List;
};
template<class T> A(T)-> A<T>;
int main()
{   //No problem here...!
    A a(10);
}

c++11 将是

template<typename T>
class List
{
public:
    List(T) {}
};
template<typename T>
class A: public List<T>
{
public:
    using List<T>::List;
};


int main()
{   //No problem here...!
    A<int> a(10);
}