Noob,
我试图从Bjarne Stroustrup' The C ++ Programming Language'中编译这段代码。但CodeBlocks一直在向我抛出这个错误。
代码是关于检查矢量函数中保存的数组的范围。
以下是代码:
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int i = 1000;
template<class T> class Vec : public vector<T>
{
public:
Vec() : vector<T>() { }
T& operator[] (int i) {return at(i); }
const T& operator[] (int i) const {return at(i); }
//The at() operation is a vector subscript operation
//that throws an exception of type out_of_range
//if its argument is out of the vector's range.
};
Vec<Entry> phone_book(1000);
int main()
{
return 0;
}
返回的错误是:
有人可以向我解释一下吗?
另外,如果我不使用命名空间std,我将如何实现这一点;&#39;
答案 0 :(得分:22)
将at
替换为vector<T>::at
或this->at
。
现在,模板中查找函数的规则比最初设计C ++时更加紧凑。
现在,只有this->
才会查找依赖库中的方法,否则会假定它是一个全局函数(或一个非依赖的基类/类本地/等)。
这有助于避免在实践中出现令人讨厌的意外,您认为方法调用会成为全局调用,或全局调用成为方法调用。它还允许更早地检查模板方法体。
答案 1 :(得分:5)
除了Yakk的回答,另一个解决方案是添加
using vector<T>::at;
到Vec
基本上将其添加到查找功能列表中。
这样,at()
可以像往常一样使用,而不会在基类类型前加this->
。