C++ list<T>::iterator 不能在派生类模板中使用

标签 c++ inheritance templates iterator g++

g++ 编译器给出了这个错误: expected `;'在“它”之前

template <typename T>
class myList : public std::list<T>
{   
public:

  void foo () 
  { 
    std::list<T>::iterator it;       // compiler error as above mentioned, why ???
  }
};

谢谢。

最佳答案

在 g++ 中。每当在模板中看到错误时:

error: expected ';' before 'it'

怀疑你需要一个类型名:

typename std::list<T>::iterator it;  

当您在模板中声明了一个依赖于一个或多个模板参数的新类型(在本例中为列表迭代器)时,这是必需的。这种需求并不是 g++ BTW 独有的,它是标准 C++ 的一部分。

关于C++ list<T>::iterator 不能在派生类模板中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539709/

相关文章:

c++ - 这两个构造函数有什么区别?

c++ - 嵌套类在继承类中的可见性

c++ - 如何在没有高 CPU 使用率的情况下在 OpenGL 游戏中正确渲染模型(带纹理的网格)?

c++ - CUDA 数组如何存储在 GPU 内存中?它们在物理上是否是线性的?

C++ 将派生类存储在单个 vector 中,派生类不包含重新定义的方法

c++ - 可变参数模板成员函数的部分特化

c++ - 是否可以使用模板来识别两种不同的类型?

c++ - 传递带括号的 typedef 作为参数

c++ - 如何为 Qt 应用程序构建崩溃板

java - 将子类添加到列表 - 方法 add(capture#2-of ? extends TopBean)...不适用于参数 (TopBean)