Typedef map作为函数的返回类型会引发编译器错误

时间:2016-12-05 09:59:57

标签: c++ maps containers typedef

Typedef a map并使用typedef名称作为函数的返回参数失败。

以下是解释该场景的伪代码:

/**
* a.h
*/
class A 
{
   public:
       typedef std::map<string,int> Int_map;
       A();
       ~A();

       const Int_map& getMap(); 

   private:
     Int_map my_map;

}


/**
* a.cpp
*/

 A::A() {}

 A::~A() {}


 const Int_map& A::getMap() // gives a compiler error : Int_map does not name a type
{
   return my_map;
}

但是如果我在“a.cpp”中使用以下声明,则没有编译器错误。 (注意:a.h文件仍包含声明为const Int_map& A::getMap()

  const std::map<string,int>& A::getMap()

导致此行为的原因是什么?

类似于相同的行为,我还有另一个与std::string相关的问题:

我知道字符串也是C ++中的typedef并且使用了模板。 返回string的函数如何在C ++和typedef map中工作会引发错误?

1 个答案:

答案 0 :(得分:2)

作用域。定义函数时,您不在类A的范围内,而是在全局范围内。您需要使用A::Int_map

您需要在A::getMap中使用范围操作符的原因相同。