【问题标题】:Nested class does not name a type嵌套类没有命名类型
【发布时间】:2013-11-11 02:22:30
【问题描述】:

在 g++ List.cc:19:1: error: âIteratorâ does not name a type when .标题如下

class List {
private:
class Element {
 public:
  char data;
  Element *next;
  Element *prev;
  Element(Element *n,Element *p, char d);
};
Element *first;

public:
class Iterator {
 public:
  Iterator();
  void operator++();
  void operator--();
  char& operator*();
  const char& operator*() const;
  bool operator==(const Iterator& itr);
  bool operator!=(const Iterator& itr);
 private:
  Iterator(const Element& ele);
  Iterator *it;
};
List();
~List();
Iterator& begin() const;
Iterator& end() const;
void insert(Iterator itr, char c);
void erase(Iterator itr);

};

第 19 行是:

Iterator& List::begin() const

这是继承问题吗?我试图在主函数中调用迭代器,就像通过 List::Iterator 调用 std::list

【问题讨论】:

  • 好吧,它不是... C 是一个虽然...的成员...
  • BA 的朋友,这意味着它可以访问该类的私有/受保护数据成员。这并不意味着它本身与A 分开,例如C
  • "Resembles"、"Along the lines of" 不是开始提问的好方法。准确。将内容复制/粘贴到问题中。显示错误点和所有类型。
  • 好的,所以我把class B的定义移到class A里面,去掉friend关键字。现在它告诉我 B 类没有命名类型...
  • 不行,因为Iterator是一个内部类,所以必须像List::Iterator这样使用。

标签: c++ class friend nested-class


【解决方案1】:

这似乎编译对我来说在带有 g++ 4.7.2 的 MinGW 上很好。检查以确保您正确使用 List::Iterator。

#include <iostream>

class List {
private:
class Element {
 public:
  char data;
  Element *next;
  Element *prev;
  Element(Element *n,Element *p, char d) : next(n), prev(p), data(d){}
};
Element *first;

public:
class Iterator {
 public:
  Iterator(){}
  void operator++(){}
  void operator--(){}
  char& operator*(){return data;}
  const char& operator*() const{return data;}
  bool operator==(const Iterator& itr){return false;}
  bool operator!=(const Iterator& itr){return false;}
 private:
  Iterator(const Element& ele){}
  Iterator *it;
  char data;
};

Iterator it;

List(){}
~List(){}
const Iterator& begin() const{return it;}
const Iterator& end() const{return it;}
void insert(Iterator itr, char c){}
void erase(Iterator itr){}

};

int main(int argc, char**argv)
{
    List blah;
    List::Iterator it = blah.begin();

    return 0;
}

【讨论】:

  • 对不起,我不确定你的意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2022-01-21
  • 2023-04-07
相关资源
最近更新 更多