模板声明不能出现在块范围内(模板 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++17
或 c++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);
}
这是我的代码:
#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++17
或 c++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);
}