在外部定义使用 template 定义的结构体的成员函数时报错‘template<class T1, class T2> struct AdjL’ used without template arguments
时间: 2023-09-13 11:04:11 浏览: 57
这个问题通常是因为你在定义成员函数时忘记了指定结构体的模板参数。解决方法是在成员函数的定义前加上结构体的模板参数列表。
例如,如果你有一个这样的结构体定义:
```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 T1, class T2> struct AdjL’ used without template arguments
这个错误通常表示你在使用 `template` 定义的结构体或类时,没有提供正确的模板参数。
例如,如果你有以下的结构体定义:
```cpp
template<class T>
struct Node {
T data;
Node<T>* next;
};
```
那么在使用它的时候,需要提供正确的模板参数:
```cpp
Node<int>* node = new Node<int>();
```
如果你在使用时没有提供模板参数,就会出现 `used without template arguments` 的错误。
在函数外部定义的结构体可以在其他函数中引用其成员吗
可以的。在函数外部定义的结构体可以在其他函数中引用其成员。但是需要注意的是,在引用结构体成员时,必须要通过结构体变量来进行访问。例如,如果有一个结构体定义如下:
```c
struct Person {
char name[20];
int age;
};
```
那么在其他函数中,我们可以这样访问结构体成员:
```c
void print_person(struct Person p) {
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
}
```
在这个例子中,我们定义了一个 `print_person` 函数,它接受一个 `Person` 类型的参数,并打印出这个人的姓名和年龄。在函数体中,我们通过结构体变量 `p` 来访问结构体成员 `name` 和 `age`。