这是我的List类
db.ShowTodos(...)
这是我的功能
template <typename Object>
class List {
public:
class iterator {
...
};
....
};
编译后,结果出现以下错误
错误:变量或字段&#39; swapAdjacent&#39;宣布无效
为什么它无法运作?
如果我将代码更改为以下代码,则可以正常工作
template <typename Object>
void swapAdjacent(List<Object>::iterator & itrA, List<Object>::iterator & itrB) {
}
我需要帮助;为什么第一个功能无法工作?
答案 0 :(得分:5)
这似乎是一个奇怪的编译器错误,但看起来你的问题是你需要告诉编译器依赖名称List<Object>::iterator
命名一个类型。您可以使用typename
关键字执行此操作:
template <typename Object>
void swapAdjacent(typename List<Object>::iterator & itrA,
typename List<Object>::iterator & itrB) {
}
有关typename
关键字的详细信息,请参阅this question。
为简洁起见,您可以使用迭代器作为模板参数,这也可以赢得自动扣除:
template <typename Iterator>
void swapAdjacent(Iterator & itrA, Iterator & itrB) {
}