'xyz'未在声明'xyz'的行声明错误

时间:2013-12-09 07:03:55

标签: c++ compiler-errors c-preprocessor declaration

我正在编写一个包含键值对集合的非平凡类,在编译期间,我收到一个非常奇怪的错误,我无法弄清楚。在函数中,这里与此函数非常相似,但由于所需代码的复杂性而没有上下文,我收到错误:

TValue& operator[](const TKey& key) {
   TDict::Node* node = mData.Begin(); // ERROR: 'node' was not declared in this scope
                                      // -_- ... really? 
   do {
      if(node->Data.Key == key) {
         return node->Data.Value;
      }
   } while(node != mData.End());

   this->Add(key, TValue());
   return this->End()->Data.Value;
}  
  • TDict是一个扩展为List<KeyValuePair<TKey, TValue> >
  • 的typedef
  • TDict :: Node在编译过程中可见。
  • 显然没有其他变量被称为节点。
  • 这是一个会员功能。

我不是要求纠正这个问题所需的代码,而是要求发生类似错误的潜在情况的概要。

1 个答案:

答案 0 :(得分:3)

  

它扩展到List,其中TKVPair是一个typedef   扩展到KeyValuePair。

它是依赖名称,因此,您应该使用typename

typename TDict::Node* node = mData.Begin();

阅读Where and why do I have to put the "template" and "typename" keywords?了解详情。