c ++模板函数错误:变量或字段' swapAdjacent'宣布无效

时间:2015-11-11 09:19:58

标签: c++

这是我的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) {

}

我需要帮助;为什么第一个功能无法工作?

1 个答案:

答案 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) {

}