2016-12-05 50 views
0

Typedef a map並使用typedef名稱作爲函數的返回參數失敗。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另一個問題:

據我所知,字符串也是一個typedef在C++和使用的模板。 函數返回string如何在C++和typedef map中引發錯誤?

+3

Int_map - > A :: Int_map –

回答

2

範圍界定。當您定義該函數時,您不在A類的範圍內,而是在全局範圍內。您需要使用A::Int_map

這與您需要在A::getMap中使用範圍操作符的原因相同。

相關問題