【问题标题】:Internal type cannot be found by compiler编译器找不到内部类型
【发布时间】:2013-11-19 16:25:47
【问题描述】:

我收到以下错误:

Error   1   error C2143: syntax error : missing ';' before '&'  
Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error   3   error C2065: 'Item' : undeclared identifier 
Error   4   error C2065: 'Order' : undeclared identifier    

对于这行代码:

template <class Item, class Order>
Iterator& DLinkedOrderedList<Item, Order>::Iterator::operator++(){}

如果我没记错的话,上面这行是函数返回类型 Iterator& 的正确语法?

【问题讨论】:

  • C++1x 理念:允许this(或*this)代替非静态方法的返回类型。在void 之后返回可能是最常见的事情。
  • 谢谢。是的,教授需要我们通过引用返回,所以我肯定需要使用 this 或 *this(当我问这个问题时,我还没有在函数定义中添加适当的代码)。
  • 该评论并非真正针对您的代码。 C++ 语言仍在积极开发中,我在此提出了未来的发展方向。

标签: c++ class templates


【解决方案1】:

Iterator 需要 DLinkedOrderedList&lt;Item, Order&gt;::,因为在类声明之外返回类型未知:

template <class Item, class Order>
DLinkedOrderedList<Item, Order>::Iterator& DLinkedOrderedList<Item, Order>::Iterator::operator++(){}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

如果你不喜欢那种冗长冗长的东西,你可以使用auto-&gt;

template <class Item, class Order>
auto DLinkedOrderedList<Item, Order>::Iterator::operator++() -> Iterator& {}

【讨论】:

  • 感谢您的回答。当我使用 auto 和 -> 方法时,它工作得非常好。但是当我使用正常的返回语法时,由于某种原因它不起作用: DLinkedOrderedList::Iterator& DLinkedOrderedList::Iterator::operator++(){}
  • @user3007481:不客气。两者都应该正常工作。也许你错过了什么,例如一个错字。
  • @user3007481 也许迭代器类不公开可见?
  • Iterator 类在这种情况下在 DLinkedOrderedList 中是公开可见的。仍然没有弄清楚为什么 auto 和 -> 方法有效,而经典语法却无效。
  • @user3007481:这种-&gt; 语法是专门发明的,因此-&gt; Iterator 部分出现在编译器看到DLinkedOrderedList&lt;Item, Order&gt;:: 之后,而不是之前。
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 2016-03-08
  • 2018-01-12
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
相关资源
最近更新 更多