2016-12-05 3 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に関連した別の質問があります。私は、その文字列でもC++でのtypedefで、テンプレートが使用されて理解

を。 stringを返す関数はC++で動作し、typedef mapはどのようにエラーを送出しますか?

+3

Int_map - > A :: Int_map –

答えて

2

スコープ。関数を定義するときは、クラスAのスコープではなく、グローバルスコープにあります。 A::Int_mapを使用する必要があります。

A::getMapで有効範囲演算子を使用する必要があるのと同じ理由があります。

関連する問題