3个错误:错误:未在此范围内声明“Entry”。错误:模板参数1无效。错误:'('标记之前的声明中的无效类型

时间:2015-04-01 14:57:51

标签: c++ templates vector compiler-errors declaration

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 vector<T>::at(i); }
    const T& operator[] (int i) const {return vector<T>::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); //this line is giving me trouble

int main()
{

    return 0;
}

它给了我这些错误:

  • 错误:未在此范围内声明“Entry”。
  • 错误:模板参数1无效。
  • 错误:'('token。
  • 之前的声明中的无效类型

我需要改变什么?我如何申报Vec Entry?

1 个答案:

答案 0 :(得分:0)

老实说,我怀疑你直接从Bjarne复制了这段代码。但问题是错误说的是:Entry未声明。 如果您只是想玩这个例子,可以尝试例如

Vec<int> 

代替。但是,还有一个小问题(这是让我相信你改变了Bjarnes代码的问题):你的类Vec没有构造函数需要int,因此

Vec<int> phone_book(1000); 

无法正常工作。只需提供这个构造函数:

Vec(int size) : vector<T>(size) {}

它应该有效。