2016-12-05 10 views
0

Typedef a map и с использованием typedef имя в качестве параметра возврата к функции не работает.Typedef map как возвращаемый тип функции вызывает ошибку компилятора

Ниже приведен псевдокод объясняет ситуацию:

/** 
* 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», нет никакой ошибки компилятора. (Примечание: хиджры файл по-прежнему содержит объявление константных Int_map& A::getMap())

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

Что вызывает такое поведение?

Аналогичен такое же поведение, у меня есть еще один вопрос, связанный с std::string:

Я понимаю, что строка также ЬурейеЕ в C++ и используется шаблон. Как работают функции, возвращающие string, в C++ и typedef map выдает сообщение об ошибке?

+3

Int_map -> A :: Int_map –

ответ

2

Оценка области. Когда вы определяете функцию, вы не занимаетесь классом A, а в глобальной области. Вам нужно использовать A::Int_map.

По той же причине вам необходимо использовать оператор обзора в A::getMap.