‘template<class T1, class T2> struct AdjL’ used without template arguments
时间: 2023-09-13 07:03:31 浏览: 42
这个错误通常表示你在使用 `template` 定义的结构体或类时,没有提供正确的模板参数。
例如,如果你有以下的结构体定义:
```cpp
template<class T>
struct Node {
T data;
Node<T>* next;
};
```
那么在使用它的时候,需要提供正确的模板参数:
```cpp
Node<int>* node = new Node<int>();
```
如果你在使用时没有提供模板参数,就会出现 `used without template arguments` 的错误。
相关问题
在外部定义使用 template 定义的结构体的成员函数时报错‘template<class T1, class T2> struct AdjL’ used without template arguments
这个问题通常是因为你在定义成员函数时忘记了指定结构体的模板参数。解决方法是在成员函数的定义前加上结构体的模板参数列表。
例如,如果你有一个这样的结构体定义:
```cpp
template<class T1, class T2>
struct AdjL {
// 成员变量和其他成员函数
void add_edge(T1 u, T2 v);
};
```
那么你想要在外部定义 `add_edge` 函数时,需要指定模板参数,像这样:
```cpp
template<class T1, class T2>
void AdjL<T1, T2>::add_edge(T1 u, T2 v) {
// 函数实现
}
```
这样就可以避免出现错误信息了。
template<class _Ty> struct remove_reference { // remove reference using type = _Ty; }; template<class _Ty> struct remove_reference<_Ty&> { // remove reference using type = _Ty; }; template<class _Ty> struct remove_reference<_Ty&&> { // remove rvalue reference using type = _Ty; }; template<class _Ty> using remove_reference_t = typename remove_reference<_Ty>::type;
这段代码是C++标准库中的一部分,定义了一个模板类型转换工具类remove_reference和相应的别名模板remove_reference_t。
remove_reference用于去除一个类型的引用,分为三个部分:
1. 当输入的类型_Ty不是引用类型时,直接将_Ty作为结果类型。
2. 当输入的类型_Ty是左值引用类型时,将_Ty去除引用后作为结果类型。
3. 当输入的类型_Ty是右值引用类型时,将_Ty去除引用后作为结果类型。
remove_reference_t是remove_reference的别名模板,用于简化代码书写,直接使用remove_reference_t<T>就可以得到去除T类型引用后的类型。