template <class T> class myTemp { public: void m(); // …… }; void myTemp :: m() { /* m’s body */ }
时间: 2024-03-22 21:38:30 浏览: 79
这段代码存在一个语法错误,具体来说是在定义myTemp类的成员函数m时,没有指定类模板参数T,将导致编译错误。
在C++中,当类被声明为模板类时,成员函数的定义必须在类模板定义内部进行,或者在类模板定义外部通过指定类模板参数进行显式实例化。如果在类模板定义外部定义成员函数,必须指定类模板参数,以告诉编译器该成员函数属于哪个类模板。
修复这个错误的方法是,在定义myTemp类的成员函数m时,指定类模板参数T,例如:
```
template <class T>
class myTemp {
public:
void m(); // ……
};
template <class T>
void myTemp<T>::m() {
/* m’s body */
}
```
在这个修改后的代码中,定义myTemp类的成员函数m时,指定了类模板参数T,使得编译器知道该成员函数属于哪个类模板。同时,在类模板定义外部通过显式实例化也可以定义成员函数,例如:
```
template <class T>
class myTemp {
public:
void m(); // ……
};
template <class T>
void myTemp<T>::m() {
/* m’s body */
}
// 显式实例化
template class myTemp<int>;
```
在这个修改后的代码中,使用了显式实例化来定义myTemp类的成员函数m,指定了类模板参数为int,表示将myTemp<int>实例化为一个具体的类,该类包含了成员函数m的定义。
阅读全文